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

C 多线程应用程序中的信号处理调试,c,multithreading,debugging,signals,C,Multithreading,Debugging,Signals,我有一个使用pthreads的多线程应用程序。我的线程实际上使用sigwait等待信号。实际上,我想调试我的应用程序,看看哪个线程在什么时候收到哪个信号,然后调试它。有没有办法,我可以做到这一点。如果我直接运行我的程序,那么信号将快速生成并由我的处理程序线程处理。我想看看哪个处理程序从sigwait调用中醒来,并处理信号和所有信息。这个方便的实用程序可以打印出大量有关系统调用和信号的有用信息。记录定时信息或收集有关信号使用性能的统计信息将非常有用 如果您有兴趣在特定信号触发的事件中获取断点,则可

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

这个方便的实用程序可以打印出大量有关系统调用和信号的有用信息。记录定时信息或收集有关信号使用性能的统计信息将非常有用


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

< P> > GDB可以通过线程设置断点(例如,在从SIGWEATE返回之后),其中一件事情可以尝试,所以您知道哪个线程被唤醒:

break file.c thread [thread_nr]
不要忘记告诉gdb向您的程序传递信号,例如:

handle SIGINT pass
您可能希望将所有这些内容都放在.gdbinit文件中,以节省大量键入工作

Steven Schlansker肯定是对的:如果这发生了显著改变程序的计时模式(因此您可以看到您的程序在调试器下的行为与“在野外”完全不同),那么strace和日志记录是您最后的希望。
我希望这会有所帮助。

是否可以在我的线程中使用eclipse和断点。我不确定这是否有效。信号是连续生成的,我首先阻塞它们,然后使用sigwaitWell同步访问它们,在调试器(尤其是断点)下运行程序可能会显著改变异步事件的计时模式。如果您想准确了解计时的实际工作方式,我会在没有附加调试程序的情况下运行它。