4

当我的应用程序突然崩溃时,有没有办法可以获得完整的崩溃转储?

问题是我怀疑这是由于非托管代码杀死了 .net 框架本身,因此,除非在崩溃时将调试器附加到应用程序,否则应用程序甚至没有机会处理崩溃。

我无法附加调试器并等待,因为崩溃是随机发生的,而且我们安装了许多位置,所以我想知道是否可以在不附加调试器的情况下执行此操作。

编辑:我知道 Microsoft Debugging SDK,而且我也刚刚发现了 DebugDiag。我想这样做而不必每次都附加到应用程序,因为它通常处于销售中间,我没有时间附加调试器并探索堆栈跟踪。DebugDiag 似乎确实让我为此设置了一个规则,但它似乎只适用于已经运行的进程,而不是等待某个进程启动。

4

4 回答 4

2

您可以使用adplus -crashuserdump.exe

于 2008-11-05T14:02:30.287 回答
0

最好的方法是编辑注册表,以便在发生崩溃时调用适当的应用程序来生成转储。因此,在您的情况下,我会让 Watson 博士生成故障转储。

链接

基本上编辑注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug

设定值

Value Name = Auto
Type = String (REG_SZ)
Data Value = 1 or 0. (Default is 1)
Value Name = Debugger
Type = String (REG_SZ)
Data Value = drwtsn32 -p %ld -e %ld -g

这将在您的应用程序崩溃时调用 Dr. Watson。有关更多详细信息,请参阅本文中的链接,请注意,如果您希望以后不调用 Dr. Watson,则需要将 Auto 值设置为 0。

于 2012-03-23T08:31:05.967 回答
0

为您的程序创建一个通用异常处理程序。在异常处理程序内部编写代码以在所需路径中手动创建转储。

此链接将有助于 http://brakertech.com/howto-c-generate-dump-file-on-crash/

于 2012-03-23T13:25:06.027 回答
0

debugdiag 是完全可编写脚本的。当我遇到这样的问题时,我们会让它扫描某些进程名称,并自动附加。

于 2009-06-01T19:58:37.167 回答