2012-06-11 30 views
0

我正在嘗試爲守護進程編寫一個插件,現在我處於最後階段。所以我想到mtrace尋找內存泄漏,因爲我沒有看到任何可能的方式來啓動一個valgrind實例(我沒有運行實際的守護進程,我運行一個啓動進程來檢查一些配置文件,並在此之後啓動守護進程)。mtrace精度

因此,當我通過mtrace查看日誌時,發現很多非常不準確的信息。例如它說index += UNIT是一個永遠不會釋放的內存分配,以及許多類似的東西。

我爲mtrace運行以下命令:

mtrace ./a.out memory > raw.log; cat raw.log | tr -s " " " " | cut -d" " -f4 > err.log; cat err.log | addr2line -e a.out > fin.log

爲什麼我得到的完全不是有用的輸出任何想法?

P.S:a.out的編譯所有的調試標誌上

回答

1

我相信問題是addr2line
你應該嘗試閱讀原始raw.log,看看它是否有意義。
取一個可疑分配,在原始日誌中找到它,運行objdump -lrd a.out並找到組裝線。這應該是致電malloc。如果是addr2line故障,如果不是,則故障爲mtrace

一些可能存在的缺陷:
1.無-g編譯a.out
2.運行一個a.out並給出另一個a.outaddr2line
3.搜索源代碼版本不正確的行號。

P.S.你沒有像#define UNIT (malloc(1000),7)這樣的東西,是嗎?