如果我的 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/