如何告诉valgrind memcheck forked进程?

Nat*_*man 33 c c++ linux valgrind fork

我有一个流程x,我想检查泄漏valgrind.问题在于x运行y,y反过来运行z.我不能x独立运行因为yz设置环境x,例如环境变量,命令行开关,所需的文件x等.

  1. 有什么方法可以告诉我valgrind继续运行z但是要跟踪它找到的任何叉子并报告它们吗?
  2. 我有什么方法可以告诉你valgrind跟踪任何问题,但只报告名为的进程x吗?
  3. 有什么方法可以告诉我valgrind附加已经运行的进程,我可以用gdb做的方式吗?

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

谢谢!

Jes*_*erE 42

  1. 给定--trace-children=yes选项时,Valgrind遵循分叉进程.
  2. 您应该能够通过使用合适的过滤器来实现这一目标.
  3. 没有.Valgrind使用LD_PRELOAD挂钩到模块加载代码,因此无法附加到正在运行的进程.

  • Valgrind*使用*来使用LD_PRELOAD,但在当前版本中不这样做.你对3.的回答仍然是正确的,但原因与LD_PRELOAD无关. (7认同)
  • 没有`--depth`选项; `--trace-children = yes`将跟踪叉子和所有其他后代的叉子. (4认同)
  • 根据手册页,此选项不会导致valgrind跟踪到forks,它会导致它跟踪到execs.Valgrind总是跟随分叉,但除非你添加这个选项,否则不会跟随exec(是我对手册页的理解). (3认同)