【问题标题】:Generate dump with unmanaged code crash?生成带有非托管代码崩溃的转储?
【发布时间】:2010-09-20 21:06:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net debugging dump


    【解决方案1】:

    您可以使用adplus -crashuserdump.exe

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        最好的方法是编辑注册表,以便在发生崩溃时调用适当的应用程序来生成转储。因此,在您的情况下,我会让 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,则需要将 Auto 值设置为 0。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-13
            • 1970-01-01
            • 2017-03-07
            • 1970-01-01
            • 2013-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多