在多线程应用程序中调试信号处理

时间:2012-09-30 20:07:18

标签: c multithreading debugging signals

我有使用pthreads的多线程应用程序。我的线程实际上使用sigwait等待信号。实际上,我想调试我的应用程序,看看哪个线程在什么时间接收哪个信号然后调试它。有什么方法,我可以做到这一点。如果我直接运行我的程序,那么信号会快速生成并由我的处理程序线程处理。我想看看哪个处理程序从sigwait调用中唤醒并处理信号和所有。

2 个答案:

答案 0 :(得分:1)

方便的strace实用程序可以打印出大量有关系统调用和信号的有用信息。记录定时信息或收集有关信号使用性能的统计数据会很有用。

如果您有兴趣在特定信号触发的事件中获取断点,您可以考虑存储足够的相关信息以识别变量中的事件并设置conditional breakpoint.

答案 1 :(得分:0)

你可以尝试使用gdb的一件事是按线程设置断点(例如刚刚从sigwait返回),所以你知道哪个线程被唤醒:

break file.c thread [thread_nr]

不要忘记告诉gdb将信号传递给您的程序,例如:

handle SIGINT pass

您可能希望将所有这些内容放入 .gdbinit 文件中以节省大量输入内容。

Steven Schlansker绝对是正确的:如果这恰好会显着改变你的程序的时序模式(所以你可以看到你的程序在调试器下的行为完全不同于“在野外”)然后 strace 和伐木是你最后的希望。 我希望有所帮助。