Valgrind输出位置不正确

valgrind improper output location

本文关键字:不正确 位置 输出 Valgrind      更新时间:2023-10-16

我有一个程序,它应该在另一个程序上运行valgrind并将valgrind输出定向到另一个文件。我使用的代码是:

char* args[] = {"sudo",  //(This is inside a fork)
        "valgrind",
        "--leak-check=full",
        "--show-leak-kinds=definite",
        "--errors-for-leak-kinds=definite",
        "<path to executable>", //placeholders
        "&><path to output file>", //placeholders
        ""};
execvp("sudo",args);

我得到的问题是,无论我做什么,它实际上都不会将输出定向到终端以外的任何地方。

我试过"&>"answers">"没有变化。我试过在终端中运行它,重定向输出到文件,我也试过在eclipse中运行它,带终端参数,等等。我不知道我还能尝试什么。

有人知道为什么"&>"没有重定向吗?我已经确认在终端中输入args数组(不是作为程序的一部分)确实有效。好像是c++程序的问题(可能是fork?)

我建议您使用--log-file=<filename>选项。

从手册:

--log-file=<filename>

指定Valgrind应该将所有消息发送到指定的文件。如果文件名为空,则会导致一个中止。可以使用三种特殊的格式说明符

%p被替换为当前进程ID。这是非常有用的调用多个进程的程序。警告:如果你使用——trace-children=yes,如果你的程序调用了多个进程,或者你的程序fork之后没有调用exec,那么你不使用此说明符(或下面的%q说明符),Valgrind的输出所有这些进程都将放在一个文件中,可能是混乱的,并且可能是不完整的。

%q{FOO}被替换为环境变量FOO的内容。如果{FOO}部分是畸形的,它将导致中止。这个说明符是很少需要,但在某些情况下非常有用。当运行MPI程序)。其思想是指定一个变量是否会在作业的每个过程中设置不同BPROC_RANK或任何适用于您的MPI设置。如果命名为如果未设置环境变量,则会导致中止。注意,在一些在shell中,{和}字符可能需要用反斜杠。

%%被替换为%。

如果%后面跟任何其他字符,将导致中止。

如果文件名指定了一个相对文件名,则放在程序的初始工作目录:这是当前目录当程序在fork之后开始执行时执行。如果它指定了一个绝对文件名(例如。然后以'/'开头它被放在那里。