运行valgrind

时间:2017-01-26 05:17:09

标签: c linux valgrind

我有一个程序,它使用fork创建另一个进程,几乎立即调用execv执行可执行文件。我想检查子进程的内存泄漏。由于主进程启动了许多其他可执行文件并运行了更多脚本(使用--trace-children选项很难跟踪),我想使用execv从主进程内部调用valgrind并传递可执行文件作为参数。

我的代码是这样的 -

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
    char tool[30], logpath[30], executable[30], exepath[30];
    char *arguments[5];
    strcpy(tool, "--leak-check=full");
    strcpy(logpath, "--log-file=valrep.txt");
    strcpy(executable, "./memleak");
    strcpy(exepath, "/usr/bin/valgrind");

    arguments[0] = exepath;
    arguments[1] = tool;
    arguments[2] = logpath;
    arguments[3] = exepath;
    execv("/usr/bin/valgrind", arguments);
    return 0;
}

memleak是我要检查泄漏的程序。但是当我运行这个程序时,我收到了这个错误。

Running valgrind using the tool: --leak-check=full.
The report is stored in: --log-file=valrep.txt.
valgrind: You cannot run '/usr/bin/valgrind' directly.
valgrind: You should use $prefix/bin/valgrind.

我做了一些谷歌搜索,但无法找出原因。请帮忙!

1 个答案:

答案 0 :(得分:1)

您没有传递可执行路径。

arguments[0] = exepath;
arguments[1] = tool;
arguments[2] = logpath;
arguments[3] = exepath;

替换为

arguments[0] = exepath;
arguments[1] = tool;
arguments[2] = logpath;
arguments[3] = executable;

如果您对此有任何疑问,请告诉我。