我有使用pthreads的多线程应用程序。我的线程实际上使用sigwait等待信号。实际上,我想调试我的应用程序,看看哪个线程在什么时间接收哪个信号然后调试它。有什么方法,我可以做到这一点。如果我直接运行我的程序,那么信号会快速生成并由我的处理程序线程处理。我想看看哪个处理程序从sigwait调用中唤醒并处理信号和所有。
答案 0 :(得分:1)
方便的strace实用程序可以打印出大量有关系统调用和信号的有用信息。记录定时信息或收集有关信号使用性能的统计数据会很有用。
如果您有兴趣在特定信号触发的事件中获取断点,您可以考虑存储足够的相关信息以识别变量中的事件并设置conditional breakpoint.
答案 1 :(得分:0)
你可以尝试使用gdb的一件事是按线程设置断点(例如刚刚从sigwait返回),所以你知道哪个线程被唤醒:
break file.c thread [thread_nr]
不要忘记告诉gdb将信号传递给您的程序,例如:
handle SIGINT pass
您可能希望将所有这些内容放入 .gdbinit 文件中以节省大量输入内容。
Steven Schlansker绝对是正确的:如果这恰好会显着改变你的程序的时序模式(所以你可以看到你的程序在调试器下的行为完全不同于“在野外”)然后 strace 和伐木是你最后的希望。 我希望有所帮助。