如果你正在使用__try{ } __except()
你不应该。
那些和 C++ 代码不能很好地混合。(例如,您不能在用这些对象包装的函数的堆栈上包含 C++ 对象。try {} catch() {}
如果您使用catch(...)
(带有省略号),则应该使用 C++,它的作用与__except()
两者在调试和发布中的行为相同try.. catch
。__try .. __except
如果您怀疑您的问题是意外异常,您应该阅读以下所有内容:
SetUnhandledExceptionFilter()
_set_se_translator()
_CrtSetReportMode()
_RTC_SetErrorFunc()
_set_abort_behavior()
_set_error_mode()
_set_new_handler()
_set_new_mode()
_set_purecall_handler()
set_terminate()
set_unexpected()
_set_invalid_parameter_handler()
_controlfp()
使用前两个之一可能会让您很快查明您的问题。如果您希望对过程中可能出现的所有错误情况进行绝对控制,剩下的就在那里。
具体来说,SetUnhandledExceptionFilter()
您可以设置一个函数过滤器来记录导致异常的代码的地址。然后,您可以使用调试器来确定该代码。使用 DbgHelp 库和提供给过滤器函数的信息,您可以编写一些代码,打印出崩溃的完整堆栈跟踪,包括符号和行号。
确保你设置你的构建配置来为发布构建发出调试符号。他们只能帮助并且不会做任何事情来减慢您的应用程序(但可能会使其更大)