如何从崩溃中提取调试信息

hoj*_*oju 11 c++ windows crash stack-trace backtrace

如果我的C++应用程序在Windows上崩溃,我想向我们的服务器发送有用的调试信息.

在Linux上我会使用GNU backtrace()函数 - 是否有Windows的等价物?

有没有办法在程序崩溃后提取有用的调试信息?或者只是从过程中?

(根据"测试你的应用程序,所以它不会崩溃"的建议是没有用的! - 所有非平凡的程序都会有bug)

Mic*_*ael 7

Stackwalk64函数可用于在Windows上捕获堆栈跟踪.

如果您打算使用此函数,则应确保在禁用FPO的情况下编译代码 - 如果没有符号,StackWalk64将无法正确地执行FPO的帧.

__try/__except通过调用SetUnhandledExceptionFilter,您可以通过顶级块获取崩溃时正在运行的代码.这有点不可靠,因为它要求您在崩溃的进程中运行代码.或者,您可以只使用内置的Windows错误报告来收集崩溃数据.这更可靠,因为它不需要您添加在受损,崩溃的进程中运行的代码.唯一的成本是获得代码签名证书,因为您必须向服务提交签名的二进制文件. https://sysdev.microsoft.com/en-US/Hardware/signup/有更多详细信息.