【问题标题】:How do I tell valgrind to memcheck forked processes?如何告诉 valgrind 对分叉进程进行 memcheck?
【发布时间】:2010-09-23 00:40:45
【问题描述】:

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

  1. 有什么方法可以告诉valgrindz 上运行,但要关注它发现的任何分叉并报告它们?
  2. 有什么方法可以告诉valgrind 跟随任何分叉,但只报告名为x 的进程?
  3. 有什么方法可以告诉valgrind 附加到已经运行的进程,就像我可以用 gdb 做的那样?

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

谢谢!

【问题讨论】:

    标签: c++ c linux fork valgrind


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

    【讨论】:

    • Valgrind 使用来使用 LD_PRELOAD,但在当前版本中没有这样做。您对3.的回答仍然正确,但原因与LD_PRELOAD无关。
    • 使用trace-childen的时候,是不是也需要指定--depth,否则会停止监控fork的fork?
    • 没有--depth选项; --trace-children=yes 将跟踪分叉和所有其他后代。
    • 根据手册页,此选项不会导致 valgrind 跟踪到 fork,它会导致它跟踪到 execs。 Valgrind 始终遵循 fork,但不会遵循 exec,除非您添加此选项(这是我对手册页的理解)。
    猜你喜欢
    • 2011-03-08
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多