4

我已经使用分析工具 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

甚至有可能做到这一点吗?我已经对此进行了很多搜索,但没有找到任何具体的答案。

4

1 回答 1

3

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

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

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

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

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

于 2015-06-08T05:35:18.580 回答