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

标签 c++ windows crash stack-trace backtrace

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

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

有没有办法在程序崩溃后提取有用的调试信息?还是仅来自流程内部?

(“测试您的应用程序,以免它崩溃”的建议没有帮助!-所有重要的程序都会有错误)

最佳答案

函数Stackwalk64可用于在 Windows 上捕捉堆栈跟踪。

如果您打算使用此功能,您应该确保在禁用 FPO 的情况下编译代码 - 如果没有符号,StackWalk64 将无法正确遍历 FPO 的帧。

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

关于c++ - 如何从崩溃中提取调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850617/

相关文章:

c++ - 多项式积分的自动偏导数

c++ - 不能将 operator= 与 std::stringstream 一起使用

c++ - kbhit() 在 MacOS 上检测按键

c++ - 使用迭代器的初始化列表构造容器

c++ - 将 32 位路径转换为其 WOW64 等价物

java - 在 Junit 测试中找不到符号失败

android - Activity 死亡重新启动进程

iPhone KERN_INVALID_ADDRESS

Python C 扩展与 pyd 一起打包 DLL

android - Eclipse Android 应用程序崩溃