【问题标题】:How to generate windows memory dump when application crashes.?应用程序崩溃时如何生成 Windows 内存转储。?
【发布时间】:2015-05-08 10:42:10
【问题描述】:

有没有一种简单的方法可以为崩溃的应用程序生成内存转储?

我有一种情况,客户收到了导致崩溃的代码,因为代码本身没有用于中止回溯生成的信号处理程序我想知道是否有一种简单的方法来告诉 Windows 生成内存崩溃应用程序的转储。

理想的解决方案不涉及调试工具的安装(或代码修改),但如果这是不可能的,那么了解这将非常有帮助。

【问题讨论】:

    标签: windows crash crash-dumps


    【解决方案1】:
    1. 当应用程序崩溃时转储内存的一种简单方法是使用 Windows 任务管理器。 当发生异常或应用程序错误时,窗口会弹出一个内存对话框并显示导致崩溃的地址位置。在消息框上单击确定之前,打开任务管理器并右键单击崩溃的应用程序并选择创建转储文件。看看下面的屏幕截图。 选择文件

    2)另一种生成用户模式转储的方法是添加以下注册表项

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows 错误报告 >\LocalDumps\application.exe application.exe 应替换为扫描仪下的应用程序名称。

    在此键下可以添加以下值

    转储文件夹

    转储文件的存储路径。如果您不使用默认路径,请确保该文件夹包含允许崩溃进程将数据写入文件夹的 ACL。 对于服务崩溃,转储会根据使用的服务帐户写入服务特定的配置文件文件夹。例如,系统服务的配置文件文件夹是 %WINDIR%\System32\Config\SystemProfile。对于网络和本地服务,文件夹是 %WINDIR%\ServiceProfiles。

    转储计数

    文件夹中转储文件的最大数量。当超过最大值时,文件夹中最旧的转储文件将被新的转储文件替换。

    转储类型

    指定以下转储类型之一: 0:自定义转储 1:迷你转储 2:完全转储

    CustomDumpFlags

    要使用的自定义转储选项。此值仅在 DumpType 设置为 0 时使用。 这些选项是 MINIDUMP_TYPE 枚举值的按位组合。

    【讨论】:

    • 您的解决方案的问题是,有时我的程序在没有崩溃窗口的情况下退出,我找到了我发布的更通用的解决方案,但感谢您提供其他获取转储的方法!
    • @cerkiewny 我已根据您的要求编辑了我的答案。我知道这一点,我们以编程方式将其添加为产品安装的一部分。所以我认为由于某种原因这对您不起作用,所以建议一个简单的功能。
    • @cerkiewny 没问题。
    【解决方案2】:

    我自己找到了答案,msdn在以下位置指定了调试寄存器:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows 错误\LocalDumps

    需要设置以下值:

    • 转储文件夹
    • 转储计数
    • 转储类型
    • 自定义转储标志

    可通过here 获取大量文档。

    如果寄存器不存在,可以手动创建它们,windows 会选择它。

    这也是可能的,无需通过以下步骤直接修改注册表:

    • 点击开始,然后点击控制面板。
    • 双击系统,然后单击高级系统设置。
    • 单击“高级”选项卡,然后单击“启动和恢复”下的“设置”。
    • 在写入调试信息列表中,单击小内存转储 (64k)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多