0

我正在 mac os 上开发多线程应用程序。我面临下一个问题:当我尝试使用 xcode-cocoa 应用程序进行调试时(注意:控制台应用程序没有相同的问题),我的线程在下一次调用中返回错误:kevent()、semaphore_wait() , semaphore_timedwait() 与 EINTR(用于 kevent)和 KERN_ABORTED(用于 semaphore_*)。我认为这是由于 lldb 的工作。

问题是:我无法调试我的应用程序,因为我在收到此类事件后崩溃了。如果我会做他们的处理(只是回忆相同的功能),那么我的应用程序工作非常奇怪。无论如何,当我的 semaphore_timedwait() 中断时,我不能(我可以,但它非常难看)对这种情况做出很好的处理,因为我应该在我去 timedwait() 以使新的 timedwait() 正确之前“记住”时间。

因此,我的问题的解决方案是,如果我可以禁用当前线程“中断” - 从另一个线程\进程中断的能力,如果 lldb 将发送一些信号,我的函数将不会返回。在mac os上可以吗?

4

1 回答 1

0

几点注意事项:

  1. 在某些调试器中(我知道 gdb 支持),您可以说是所有线程还是只有一个线程在断点处停止。

  2. 一般来说,你应该在你的代码中准备好一个信号,即使它是更多的工作。

  3. 在多线程应用程序中,您可以考虑在大多数(辅助)线程中阻塞信号,因此信号应在准备就绪的线程中处理。见pthread_sigmask()

于 2012-06-01T12:41:17.717 回答