【发布时间】:2015-11-29 18:44:25
【问题描述】:
我有一个我不熟悉的庞大代码库,程序异常终止,因为某处的线程正在调用__fastfail。这是基于以
...请求致命的程序退出。
调用堆栈没有符号,因为它位于 C++ 2015 运行时 (ucrtbase.dll) 中。该调用似乎是在我的主线程以外的线程上进行的。这个神秘的线程只在问题发生之前才开始,所以我无法在调试器中捕捉到它的行为 - 我不知道是什么开始了它,以及是什么导致了整个过程。
我在我的main() 中使用__try/__catch 有SEH,所以任何未处理的异常都应该被困在那里。相反,我猜测某处会冒泡到运行时并导致__fastfail。
我尝试使用 SEH 像 main() 一样在我的所有线程中添加,尝试挂钩 abort()、exit() 和 terminate(),但找不到问题。我该如何调试,有什么提示吗?
【问题讨论】:
-
您可以尝试在 CreateThread 上设置一个断点,看看在崩溃之前发生了什么。
-
ucrtbase.dll 的公共符号在符号服务器上可用。您应该能够加载它们。
-
嗯,它实际上并没有使用 __fastfail()。你必须深入挖掘,因为它是无法回答的。堆栈跟踪非常重要。
标签: c++ multithreading debugging crash