使用非托管代码崩溃生成转储?

时间:2008-11-05 13:51:22

标签: .net debugging dump

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

问题是我怀疑这是由于非托管代码导致.net框架本身死亡,并且因此,除非在崩溃时有一个调试器连接到应用程序,否则应用程序甚至无法获取有机会处理崩溃。

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

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

4 个答案:

答案 0 :(得分:2)

您可以使用adplus -crashuserdump.exe

答案 1 :(得分:0)

debugdiag完全scriptable。当我遇到这样的问题时,我们会扫描某些进程名称,并自动附加。

答案 2 :(得分:0)

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

请参阅link

基本上编辑注册表项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,则需要将“自动”值设置为0。

答案 3 :(得分:0)

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

此链接会有所帮助 http://brakertech.com/howto-c-generate-dump-file-on-crash/