2015-06-03 38 views
3

我一直在使用分析工具valgrind一段時間了。它需要一個可執行文件來運行,即Valgrind與動態鏈接的GCC插件

$ valgrind ./a.out 

我想用它在動態鏈接GCC插件,並列出所需的時間,並通過插件使用的每個函數調用的次數。我運行的是GCC插件如下:

$ gcc -fplugin=./plugin.so myfile.c 

當我運行下面的命令,Valgrind的報告內存泄漏只gcc和不plugin.so。我需要一種方法來在我的插件上運行valgrind,這是一個.so文件。

$ valgrind gcc -fplugin=./plugin.so myfile.c 

$ gcc -fplugin=./plugin.so myfile.c -wrapper valgrind 

它甚至可以做到這一點?我已經搜尋了很多,但沒有找到具體的答案。

回答

2

我在valgrind-users郵件列表上發佈了這個問題,並得到了解決方案。

http://sourceforge.net/p/valgrind/mailman/message/34174148/

插件不是由GCC本身,而是通過GCC的子進程加載。因此,我們需要與選擇的valgrind運行--trace-童裝= YES

$valgrind –trace-children=yes --leak-check=full g++ -fplugin=./plugin.so test0.o 

然後,我們需要尋找我們的函數的名稱Valgrind的輸出,並確定孩子的過程,負責裝載和執行插件。嘗試在插件中故意引入一些內存泄漏並在輸出中搜索函數,以確定進程。