如何将管道作为Valgrind的输入?

13

我想使用几乎自动化的工具来检查我的程序内存(我还不擅长使用gdb),所以我最终选择了使用valgrind。

然而,我想将管道作为valgrind的输入;即我想输入以下内容:

 >cat file.h | ./prog 
我会尽力而为:

我尝试做一个

 >valgrind `cat file.h | ./prog`

没有成功。

我还试图制作一个脚本文件,在其中放置整个命令,然后将其传递给valgrind,但也没有取得更多的成功。


1
可能相关:https://dev59.com/s1TTa4cB1Zd3GeqPqkCS - dhke
4
你尝试过使用 cat file.h | valgrind ./prog 吗? - oliver
6
使用valgrind ./prog < file.h进行尝试。其中,valgrind是一个内存调试工具,./prog是你要运行的程序文件名,< file.h表示将文件file.h作为输入传递给程序。 - Luigi Belli
1
相关 - n. m.
你好,有效地说,最后两个答案可行。非常感谢!但是,我不确定 luigi 的答案在任何情况下都适用,因为这里 shell 正在加载文件,并且实际上执行与 cat 相同的操作,但对于其他命令可能不起作用。 - evoliptic
1个回答

2

正如评论中提到的,您应该能够使用以下任一方法:

cat file.h | valgrind ./prog
valgrind ./prog < file.h

第一个示例使用了管道,正如您特别要求的那样,它可以轻松地成为任何程序的输出,例如:
ls -al | valgrind ./prog
ps -axuwww | valgrind ./prog

如果您只想获取文件的内容,则后一种方法更有效。

您尝试的反引号方法并不适用于此处要做的事情。它适用于当您希望一个命令的输出成为另一个命令的参数时(例如,ls -al cat namelist 以对名为nameless的文件中列出所有文件进行长时间详细列表)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接