如何在应用程序崩溃时生成 windows 内存转储?

How to generate windows memory dump when application crashes.?

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

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

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

  1. 应用程序崩溃时转储内存的一种简单方法是使用 windows taskmanager。 当发生异常或应用程序错误时,windows 会弹出一个内存对话框并显示导致 crash.Before 的地址位置,您在消息框上单击“确定”,打开“任务管理器”并右键单击崩溃的应用程序和 select 创建转储 file.Take 看看下面的屏幕截图。 Select 文件

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting >\LocalDumps\application.exe application.exe should be replaced by the application name which is under scanner.

在此键下可以添加以下值

DumpFolder

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

DumpCount

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

DumpType

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

CustomDumpFlags

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

我自己找到了答案,msdn在以下位置指定了调试注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error\LocalDumps

需要设置以下值:

  • 转储文件夹
  • DumpCount
  • 转储类型
  • CustomDumpFlags

大量文档可用 here

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

此外,无需通过以下步骤直接修改注册表也可以做到这一点:

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