【问题标题】:Debugging Multiprocess Program in C在 C 中调试多进程程序
【发布时间】:2014-04-22 00:40:34
【问题描述】:

我正在尝试在我的多进程共享内存程序中调试死锁/竞争情况。出于某种原因,它只是在某些时候陷入僵局。我想知道此时每个进程在做什么,以便找到错误。关于如何使用 gdb 或 valgrind 的任何想法?

【问题讨论】:

  • 通常更容易使用 printf 调试 C。发布代码也可能会有所帮助
  • 多进程还是多线程?

标签: c debugging gdb multiprocessing valgrind


【解决方案1】:

不是一个完整的答案,只是一个想法:

您可以使用gdb -p <processId> /path/to/executable/being/debugged 附加到工作进程。或者直接使用strace -p <pid>

顺便说一句,现在我正在为 LibreOffice 执行此操作,KDE4 对话框插件在启动时挂起(在 libSM 交互中的某个位置):) 一个典型的竞争条件,因为它从一开始就在 gdb 下完美运行

【讨论】:

    【解决方案2】:

    这是我要做的:

    1. 重新创建问题并找到死锁的进程(通过 top/strace)。
    2. 获得 pid 后,使用 gdb 附加到它(如果从 strace 输出中不能直接看出)。
    3. Valgrind 在这种情况下可能无济于事,因为它会更改内存布局并且降低的速度会掩盖竞争条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多