如何告诉Valgrind对分叉进程进行内存检测?

46

我有一个进程x,想用valgrind检查内存泄漏。 问题是xy运行,而y又由z运行。 我无法独立运行x,因为yz设置了x的环境,例如环境变量、命令行开关、x所需的文件等。

  1. 是否有办法告诉valgrindz上运行,并跟踪任何它发现的分支并报告它们?
  2. 是否有办法告诉valgrind跟踪任何分支,但仅报告名为x的进程?
  3. 是否有办法告诉valgrind附加到已经运行的进程,就像使用gdb一样?

我不知道这是否重要,但我正在SuSE64 linux下运行valgrind-2.4.0。

谢谢!

1个回答

58
  1. 当给定 --trace-children=yes 选项时,Valgrind会跟踪派生的进程。
  2. 您应该能够通过使用适当的过滤器来实现这一点。
  3. 不行。Valgrind使用LD_PRELOAD钩入模块加载代码,所以不能附加到正在运行的进程上。

7
Valgrind早期使用LD_PRELOAD,但当前版本已不再使用。您对问题3的回答仍然正确,但原因与LD_PRELOAD无关。 - Employed Russian
1
当使用trace-children时,您是否还需要指定--depth,否则它将停止监视forks of forks? - DEzra
4
没有--depth选项;使用--trace-children=yes将会追踪所有的子进程,包括所有后代进程。 - mark4o
5
根据man页面,这个选项不会导致valgrind追踪forks,而是导致其追踪execs。Valgrind总是跟随forks,但如果你添加这个选项,它才会跟随一个exec(这是我对man页面的理解)。 - Ziggy

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