我正在开发mac os上的多线程应用程序。我遇到了下一个问题:当我尝试使用xcode-cocoa应用程序进行调试时(注意:控制台应用程序没有相同的问题),我的线程在下一次调用时返回错误:kevent(),semaphore_wait() ,semaphore_timedwait()使用EINTR(用于kevent)和KERN_ABORTED(用于semaphore_ *)。我认为这是由于lldb的工作。
问题是:我无法调试我的应用程序,因为我在收到此类事件后崩溃了。如果我将进行处理(只是回忆相同的功能),那么我的应用程序工作非常奇怪。无论如何我不能(我可以,但它非常难看)当我的semaphore_timedwait()中断因为我应该“记住”时间之前我已经去掉timedwait()以使新的timedwait()正确时,能够很好地处理这种情况。
因此,我的问题的解决方案是,如果我可以禁用当前线程“中断” - 从另一个线程\进程中断的能力,如果lldb将发送一些信号,我的函数将不会返回。是否可以在mac os上使用?
答案 0 :(得分:0)
很少注意到:
在一些debugegrs中(我知道gdb支持),你可以说是断点上是否所有线程都停止了。
一般来说,即使工作量较大,您也应该在代码中准备好信号。
在多线程应用程序中,您可以考虑阻止大多数(辅助)线程中的信号,因此信号应在准备好的线程中处理。请参阅pthread_sigmask()
。