带有动态链接 GCC 插件的 Valgrind

Valgrind with dynamically linked GCC plugin

我使用分析工具 valgrind 已有一段时间了。它需要 运行 的可执行文件,即

$    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

甚至可以这样做吗?我对此进行了很多搜索,但还没有找到任何具体的答案。

我在 valgrind-users 邮件列表上发布了这个问题并得到了解决方案。

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

该插件不是由GCC本身加载的,而是由GCC的子进程加载的。所以我们需要 运行 valgrind 选项 --trace-childen=yes

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

然后我们需要在 valgrind 输出中搜索我们函数的名称,并确定负责加载和执行 plugin.Try 在您的插件中故意引入一些内存泄漏的子进程并搜索该函数在输出中,识别进程。