2014-03-05 175 views
1

我有一個用於查找內存泄漏的.so文件。我在要執行我的目標二進制文件的會話中設置LD_PRELOAD env變量。 export LD_PRELOAD=./memleakfinder.so 但是一旦設置了這個環境變量,即使是一個簡單的linux命令,如lsps也會導致Segmentation fault (core dumped)。爲什麼會發生這種情況?我在該.so文件中過載了malloc()calloc()realloc(),free(),new,new[]等版本。 CentOS6的自動錯誤報告工具說: source:coreutils Problem:process /bin/ls was killed by signal 11(SIGSEGV)。顯然庫注入在這裏引起了問題。我怎樣才能避免它?LD_PRELOAD引起Linux命令的分段錯誤

+3

您確定**正確**實現了這些功能嗎? –

+1

使用gdb檢查覈心轉儲並在崩潰時查看堆棧跟蹤 – harmic

+1

在整個系統上運行之前,先製作測試程序,調用您的函數並對其進行測試。 –

回答

0

而不是導出環境變量,請將變量前置到要運行/調試的命令。

例如:

LD_PRELOAD=./memleakfinder.so a.out 

而庫只會加載a.out的,而不是在當前shell的所有命令的這一個調用。

我們無法幫助您確定分段故障的原因而無需查看某些代碼。