C++ 如何让valgrind检查分叉流程?

C++ 如何让valgrind检查分叉流程?,c++,c,linux,fork,valgrind,C++,C,Linux,Fork,Valgrind,我有一个流程x,我想用valgrind检查是否有泄漏。问题是x由y运行,y依次由z运行。我无法独立运行x,因为y和z为x设置环境,例如环境变量、命令行开关、x所需的文件等 我有没有办法告诉valgrind在z上运行,但跟踪它找到的任何分叉并报告它们 我有没有办法告诉valgrind遵循任何分叉,但只报告名为x的过程 是否有任何方法可以告诉valgrind附加到已经运行的进程,就像我对gdb所做的那样 我不知道这是否重要,但我是在SuSE64 linux和valgrind-2.4.0下运行的 谢谢

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

  • 我有没有办法告诉
    valgrind
    z
    上运行,但跟踪它找到的任何分叉并报告它们
  • 我有没有办法告诉
    valgrind
    遵循任何分叉,但只报告名为
    x
    的过程
  • 是否有任何方法可以告诉
    valgrind
    附加到已经运行的进程,就像我对gdb所做的那样
  • 我不知道这是否重要,但我是在SuSE64 linux和valgrind-2.4.0下运行的

    谢谢

  • 当给定
    --trace children=yes
    选项时,Valgrind遵循分叉过程
  • 您应该能够通过使用合适的过滤器来实现这一点
  • 否。Valgrind使用LD_PRELOAD钩住模块加载代码,因此无法连接到正在运行的进程

  • Valgrind过去使用LD_预加载,但在当前版本中没有这样做。你对3的回答。仍然正确,但原因与LD_PRELOAD无关。使用trace childen时,是否还需要指定--depth,否则它将停止监视forks的forks?没有
    --depth
    选项
    --trace children=yes
    将跟踪fork的fork和所有其他子代。根据手册页,此选项不会导致valgrind跟踪forks,而是导致valgrind跟踪exec。Valgrind始终遵循forks,但不会遵循exec,除非您添加此选项(这是我对手册页的理解)。