【问题标题】:Valgrind quits when application becomes daemonizedValgrind 在应用程序变为守护进程时退出
【发布时间】:2012-06-20 07:28:01
【问题描述】:

我有一个基于此守护程序示例 http://www.itp.uzh.ch/~dpotter/howto/daemonize 的代码的 C++ 应用程序,它是一个 Linux 守护程序(我使用单个 fork 使其成为守护程序)。我正在尝试使用 valgrind 查找内存泄漏:

/usr/bin/valgrind.bin --suppressions=/usr/lib/valgrind/debian-libc6-dbg.supp --tool=memcheck --child-silent-after-fork=no --trace-children=yes --leak-check=full --show-reachable=yes /usr/sbin/<my daemon>

但是 valgrind 在初始进程终止后立即退出,而应用程序仍在子进程中工作。 如果我注释掉退出初始过程的代码,那么 valgrind 将继续工作。但这不是一个干净的解决方案。 没有它我如何让 valgrind 继续工作?

【问题讨论】:

  • 许多守护进程类型的程序都有命令行选项来告诉它是否应该“守护进程”。也许你可以做类似的事情,即让它默认守护,但有标志告诉它不要?
  • 我不想为 valgrind 创建特殊的应用程序配置,而是想按原样调试应用程序。但如果这是唯一的方法,那么我会这样做
  • 你为什么使用 /usr/bin/vagrind.bin? - /usr/bin/valgrind 是一个包装脚本并设置一些环境变量。

标签: c++ linux daemon valgrind


【解决方案1】:

Valgrind 的常见问题解答明确指出它不能附加到已经运行的进程。我想他们所有的仪器设置在 fork() 上也丢失了。
他们确实提到了一个听起来非常复杂的解决方法 (here),但我认为它会增加更多不需要的复杂性,而不仅仅是不进行守护进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多