2015-06-03 40 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的输出,并确定孩子的过程,负责装载和执行插件。尝试在插件中故意引入一些内存泄漏并在输出中搜索函数,以确定进程。