什么是`myLibrary!__ scrt_stub_for_is_c_termination_complete + 0x12345`

TFM*_*TFM 8 c++ windows debugging msvcrt stack-trace

该符号myLibrary!__scrt_stub_for_is_c_termination_complete+0x12345出现在崩溃的应用程序的堆栈跟踪中。它是使用MSVC2015编译的C ++,并且大量使用Qt。

myLibrary 没有显式实现该名称的任何内容。

Google对该名称显示了一些点击率,因此显然它并不特定于该应用程序。但我找不到对此的解释。

Han*_*ant 1

这是一个“不知道它在哪里崩溃”的诊断。+0x12345 偏移量太大。这一点也不罕见,您需要良好的 PDB 才能获得准确的堆栈跟踪。没有它们,它对您编写的代码一无所知,只能通过命名的 DLL 入口点。

由于崩溃似乎是在 C 运行时库中检测到的,因此您可能会幸运地启用 Microsoft 符号服务器并让它生成您需要的 PDB。假设您在 VS 中打开了小型转储,请使用“工具”>“选项”>“调试”>“符号”来启用服务器。此 MSDN 页面中提供了一般建议和 WinDbg 建议。

  • 你的机器上有源代码,只需在 vc/crt/src 目录中搜索“_is_c_termination_complete”即可。您应该以 utility.cpp 结束,它只是在 DLL 卸载并负责清理时运行的 goo。您在堆栈跟踪中看到它的一个非常典型的原因是当程序由于程序退出时堆损坏而崩溃时。顺便说一句,强迫我猜测原因是危险的,因为猜测它实际上与该函数有关,这是这个答案的核心。 (2认同)