C++ 捕获Xcode中的线程出口

C++ 捕获Xcode中的线程出口,c++,xcode,macos,gdb,C++,Xcode,Macos,Gdb,我试图在Xcode下解决一个非常讨厌的Heisenbug,我有一个线程正在通过调用外部库进行后台处理,在某个时刻,这个线程似乎正在消失。代码如下所示: LOG("starting operation"); float progress=0; while (progress < 1.0f) { LOG("start loop"); Wait(100); // calls ::Delay() progress=otherLibrary->CheckProgress();

我试图在Xcode下解决一个非常讨厌的Heisenbug,我有一个线程正在通过调用外部库进行后台处理,在某个时刻,这个线程似乎正在消失。代码如下所示:

LOG("starting operation");
float progress=0;
while (progress < 1.0f) {
  LOG("start loop");
  Wait(100); // calls ::Delay()
  progress=otherLibrary->CheckProgress();
  LOG("end loop");
}
看来,这个循环不知怎么就被炸断了。它没有挂起,就像我闯入调试器一样,该线程似乎不再存在。如果我添加更多日志记录或移动函数,它会在稍微不同的地方出错。在某些情况下,它甚至似乎在系统的延迟功能内部爆炸

问题是:如何检测该线程中止的点

没有抛出异常,控制台gdb或系统中没有任何异常。GDB轻松地告诉我,线程_出口的捕获尚未实现。调试版本不会重现这种行为,我的最小测试应用程序也不会。我已经删除了日志代码,以防这会导致一些奇怪的同步效果,但这没有帮助。

在_pthread_exit中设置断点

在Xcode的菜单中选择运行->显示->断点 双击断点表中的最后一行。 输入_pthread_退出。 您可能还希望在pthread\u cancel中设置断点。

在pthread\u exit中设置断点

在Xcode的菜单中选择运行->显示->断点 双击断点表中的最后一行。 输入_pthread_退出。
您可能还希望在pthread_cancel中设置断点。

有用提示-断点确实会触发某些线程,但我没有看到我正在查看的线程的任何内容。有用提示-断点确实会触发某些线程,但我没有看到我正在查看的线程的任何内容。
starting operation
start loop
end loop
starting operation
start loop