在C中调试多进程程序

时间:2014-04-22 00:40:35

标签: c debugging gdb multiprocessing valgrind

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

2 个答案:

答案 0 :(得分:2)

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

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

BTW现在我正在为LibreOffice做这个,启动时挂起KDE4对话框插件(在libSM交互中的某个地方):)一个典型的竞争条件,因为它完美地从gdb开始在

下运行

答案 1 :(得分:0)

这就是我要做的事情:

  1. 重新创建问题并找到死锁的进程(通过top / strace)。
  2. 一旦你得到了pid,然后使用gdb附加到它(如果从strace输出中没有直接明显的话)。
  3. 在这种情况下,Valgrind可能没有帮助,因为它改变了内存布局,降低的速度可以掩盖竞争条件。