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

在Linux上我会用GNU backtrace() 功能是有一种相对窗口?

有没有一种方法来提取有用的调试的信息,后一个程序已经崩溃了?或者只能从这一进程?

(咨询意见沿线的"测试你的应用程序,所以它不会崩溃"是没有用的!-所有非微不足道的程序将有错误)

有帮助吗?

解决方案

该函数 Stackwalk64 可以用来捕捉栈跟踪于Windows。

如果您打算使用此功能,您应该确保编译FPO禁用你的代码 - 不带符号,StackWalk64将无法正常行走FPO'd帧

您可以通过调用SetUnhandledExceptionFilter得到一些代码在通过一个顶级__try/__except块崩溃的时间进程中运行。这是一个有点靠不住,因为它需要你有一个崩溃的进程内运行的代码。 或者,你可以将内置的Windows错误报告收集故障数据。这是更可靠的,因为它不要求你添加代码运行里面的妥协,坠毁的过程。唯一的成本是获得代码签名证书,因为你必须提交签名的二进制文件的服务。 https://sysdev.microsoft.com/en-US/Hardware/signup/ 有更多的信息。

其他提示

你可以使用的Windows API呼叫 MiniDumpWriteDump 如果你想滚你自己的代码。Windows XP和访问次数的自动化这个过程中,你可以登录在 https://winqual.microsoft.com 获得的错误的报告。

还检查了 http://kb.mozillazine.org/Breakpadhttp://www.codeproject.com/KB/debug/crash_report.aspx 对于其他解决方案。

此网站C ++异常后提供栈检索的相当详细的概述在Win32:

http://www.eptacom.net/pubblicazioni/pub_eng/except.html

当然,这将只从过程中工作,因此,如果该过程被终止或崩溃到它终止运行该代码之前,它不会工作点。

生成一个小型转储文件。然后,可以加载它在windbg或Visual Studio和检查崩溃发生的位置的整个叠层。

这里的一个好地方开始阅读。

它很简单,目前的StackFrame地址转储到日志文件中。所有您需要做的就是这样的呼吁程序故障的功能(在Windows即中断处理程序)或断言。这可以在发布的版本进行为好。该日志文件然后可以与导致有功能名称调用堆栈的地图文件进行匹配。

几年前我发表了这篇文章。

请参阅 http://www.ddj.com/architect/185300443

让我描述我如何处理在崩溃我的C++/维拓应用程序。

第一,在主要职能,我打电话 _set_se_translator, ,并通过在一个功能,将把一C++例外而不使用结构化的windows的例外情况。这一功能得到一个错误代码,你可以得到Windows错误信息通过 FormatMessage, 和一个PEXCEPTION_POINTERS的论据,它可用于编写一个小型转储(代码在这里).你还可以检查异常的代码一定的"崩溃"的错误你该被保释,等EXCEPTION_NONCONTINUABLE_EXCEPTION或EXCEPTION_STACK_OVERFLOW:)(如果这是恢复,我提示用户的电子邮件给我这个转储的文件。)

转储文件本身可以打开Visual Studio像一个正常的项目,并提供你已经创建了一个.pdb文件可执行,就可以运行的项目,它会跳的确切位置的崩溃,一起呼堆和登记册,它可以审议从调试器。

如果你想抓住一个运行时崩溃调用堆栈(加上其他好消息),甚至在网站上发布版本,那么你需要设置的博士沃森(运行DRWTSN32.EXE)。如果您选中“生成崩溃转储”选项,当一个应用程序崩溃,它会写一个小型转储文件到指定的路径(称为的User.dmp)。

您可以利用这一点,与当你建立你的服务器(在你的编译器/连接设置此生成PDB文件创建的符号结合起来 - 把这些安全在家里,你可以使用它们来搭配转储,使他们能够工作出崩溃发生的位置的源)

让自己 WinDbg的,打开它,使用菜单选项“负载崩溃转储'。一旦加载一切你可以键入“〜#KP”来获得每个线程调用堆栈(或点击按钮,在顶部为当前线程)。

有很好的文章,知道如何做到这一点所有网站上,这一个是我最喜欢的,你会想阅读本以获得如何helpyourself真正轻松地管理这些符号的理解。

您必须在应用程序中设置转储生成框架, 这里 你可以这样做。

然后,您可以将转储文件上传到服务器,以便使用 Windbg 等转储分析器进行进一步分析。

您可能需要使用ADPlus捕获崩溃调用堆栈。

您可以为Windows下载并安装调试工具。

ADPlus的的用法在这里提到: ADPlus使用

此创建完整的崩溃或挂起转储。一旦你的转储,WinDBG的就派上用场了。该地图正确PDBS和符号,你都设置为分析转储。首先使用命令“!分析-v”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top