关于Win11系统生成dump文件失败的问题

一、简述

最近项目中有个客户端程序无法调试,只能在客户环境中测试并且遇到了闪退的问题,日志中也无法反映具体的问题所在,于是乎就给加上dump文件(具体怎么生成之前的文章中有详细写到,如何使用GoogleBreadpad在windows下捕获程序崩溃报告),在本地电脑进行了测试能够正常生成,谨慎起见又在虚拟机中的win11系统里安装测试了一下,果然无法生成.dmp文件。

二、自我探索

这个时候就专门使用Everything软件一直监测本地所有.dmp文件,我自己也在界面上加了个小按钮(里面实现就是空指针操作,必定崩溃)进行崩溃测试,期间是有.dmp文件生成的但是一闪而过然后又被删除了,这个时候我关闭了系统杀毒,再次测试还是不行,然后便在文件消失的瞬间捕捉到对应的文件夹目录,在"C:\ProgramData\Microsoft\Windows\WER\Temp"目录下会生成WER.9b6ebb45-1268-498a-9ffa-293382cb0b9d.tmp.dmp这个文件以及一些其他附加的文件,这些文件是一起生成一起消失的,我猜测应该是这些文件会组合成最终的dmp文件,但是这个最终的文件没法生成是要解决的问题。

在这里插入图片描述

后来又使用管理员权限启动,兼容模式等依旧无法生成,开始进行网上查询。


三、使用人工智能帮助

接着是就是查询gpt、豆包等ai,都给出了以下内容:

如果 Windows 11 无法生成 DMP 文件,这意味着在系统崩溃或出现蓝屏时没有成功保存内存转储。以下是几个检查和解决生成 DMP 文件失败的步骤:

1. 验证转储设置

确保 Windows 已正确配置以生成转储文件:

  1. 打开系统属性

    • 右键单击“开始”按钮,选择“运行”。
    • 输入 sysdm.cpl 然后按 Enter。
  2. 设置崩溃转储选项

    • 在“系统属性”窗口中,切换到“高级”选项卡。

    • 在“启动和故障恢复”部分,点击“设置”。

    • 确保在“系统失败”部分中选中“写入调试信息”。

    • 选择合适的转储类型:

      • 小内存转储(256KB)
      • 核心转储
      • 完整内存转储
    • 确保转储文件的路径为默认值(例如:C:\Windows\MinidumpC:\Windows\Memory.dmp)。

2. 检查磁盘空间

确保你的系统驱动器(通常是 C 盘)上有足够的空间,以存储生成的 DMP 文件。如果磁盘空间不足,则无法生成转储文件。

3. 检查权限设置

确保没有权限问题阻止 Windows 写入转储文件的位置。可以通过以下步骤修复权限:

  1. 右键单击 C:\Windows\Minidump 文件夹,选择“属性”。
  2. 切换到“安全”选项卡,确保 SYSTEM 和 Administrators 用户组具有“完全控制”权限。

4. 检查驱动问题

驱动程序问题可能导致系统崩溃,阻止 DMP 文件的生成。更新所有驱动程序,特别是显卡和芯片组驱动程序,并确保它们是最新的。

5. 禁用快速启动

快速启动有时会引发与启动相关的问题。可以尝试禁用此功能:

  1. 打开控制面板。
  2. 选择“电源选项”。
  3. 点击“选择电源按钮的功能”。
  4. 点击“更改当前不可用的设置”。
  5. 取消选中“启用快速启动”选项,然后保存更改。

6. 清理系统文件

使用磁盘清理工具,清除系统不需要的临时文件可能会帮助解决一些问题。可以通过以下步骤进行:

  1. 在搜索框中输入“磁盘清理”,并选择它。
  2. 选择系统驱动器(C 盘),点击“确定”。
  3. 在列表中选择要删除的文件类型(例如临时文件、系统生成的文件等),然后点击“确认”。

7. 运行系统文件检查器

使用系统文件检查器(SFC)扫描和修复损坏的系统文件:

  1. 以管理员身份运行命令提示符(右键单击“开始”菜单,选择“Windows Terminal (管理员)”)。

  2. 输入以下命令并按 Enter:

    sfc /scannow
    
    
  3. 验证扫描是否成功。如果发现问题,按照提示进行修复。

8. 检查事件查看器

查看事件查看器中的系统日志,特别是在蓝屏死机或崩溃发生的时间点,查看是否有相关错误信息:

  1. 按 Win + X,选择“事件查看器”。
  2. 在左侧窗格中展开“Windows 日志”,查看“系统”日志或“应用程序”日志。

9. 更新 Windows

确保你的 Windows 11 系统完全更新。引入的更新可能包含修复bug的补丁,这可以解决生成 DMP 文件的问题。

10. 最后手段:重新安装 Windows

如果你已尝试上述所有步骤但仍无法解决问题,重新安装 Windows 可能是解决方案。这将确保一个干净的环境,消除所有潜在的配置和软件问题。

小结

通过这些步骤,你应该能够解决 Windows 11 上 DMP 文件生成失败的问题。如果问题仍然存在,可能需要进一步诊断计算机的硬件或寻求专业支持。


四、自我再探索

看了上面多种解决方式,我先查看了系统的一些设置,对比了虚拟机和主机设置项。

在这里插入图片描述

左图是我自己电脑Win11系统上的设置,右图是虚拟机上Win11系统上的设置项,一开始以为是这边出了问题,经过多次修改下面选项依旧无法生成.dmp文件。

在这里插入图片描述

后来又去网上查询了一些文章,提到了修改注册表的方式感觉值得一试,原作者文章:https://blog.csdn.net/xqjcool/article/details/104589051

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里他根据每个软件进行了设置,我想的是不是直接通过某一项设置直接就可以允许生成而不是这种每一个软件进行配置的方式,后来还真给我找到了在注册表对应的路径下有这么个选项 **“AlwaysKeepMemoryDump”,**好像就是来控制本地是否生成dmp文件的属性。

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

在这里插入图片描述

这里我们将值改为1之后,再次进行测试,果然生成了dmp文件,具体目录"C:\Users\30629\AppData\Local\CrashDumps"(跟当前系统登录用户关联),该目录下会生成"xxx.exe.8944.dmp"文件,这个文件就是我们需要的崩溃调试文件了,有了这个文件就可以用VS进行调试定位具体的崩溃代码片段了。


在这里插入图片描述


再回到本机,打开注册表查看对应的值,我们这里就没有设置**“AlwaysKeepMemoryDump”**的值,那系统应该就是默认生成的。

在这里插入图片描述

这里关于Win11系统生成dump文件失败的问题就解决了,目前仅测试于win11,我记得以前win7、win10上开发时是没有这个问题的,如果有小伙伴使用此方法仍旧无法解决可以留言进行讨论。

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中,可以使用gcore命令生成dump文件。gcore命令可以在运行中的进程中生成核心转储文件,以便在调试时使用。使用gcore命令生成dump文件的步骤如下: 1. 找到需要生成dump文件的进程的进程ID(PID)。 2. 在终端中输入以下命令: gcore PID 其中,PID是需要生成dump文件的进程的进程ID。 3. 执行完上述命令后,系统会在当前目录下生成一个以进程ID为名称的dump文件,例如: core.12345 其中,12345是进程ID。 4. 使用gdb等调试工具打开生成的dump文件,进行调试。 需要注意的是,生成dump文件需要root权限。同时,dump文件可能会包含敏感信息,因此需要妥善保管。 ### 回答2: Linux生成dump文件是指在遇到系统故障、崩溃等异常情况时,将应用程序或是操作系统的可执行文件保存为一份dump文件,以供后续的分析和修复。一般情况下,生成dump文件的过程需要通过安装相应的调试工具和配置相关的参数来实现。 常见的Linux生成dump文件的工具有gdb和coredump,其中gdb是一款强大的调试工具,它提供了多种命令以及脚本支持,可以支持用户在线调试、分析程序执行过程中的状态。而coredump则是一种自动产生的dump文件机制,在程序遇到异常时,会自动将进程空间部分数据保存成core文件,方便后续调试。 在使用这些工具前,需要在程序源码编译时添加一些调试相关的选项,以生成正确的dump文件。例如,在使用gdb进行调试时,可以在编译时使用-g选项来生成调试信息,然后使用gdb命令打开可执行文件,进行调试。在使用coredump时,需要在系统内核设置coredump机制,可以使用sysctl命令配置相应的参数。 生成dump文件是一种非常有效的调试工具,它可以帮助我们快速地定位程序中的问题,并加快问题解决的速度。同时,需要注意的是,dump文件可能包含敏感信息,应该妥善保管以防泄漏。 ### 回答3: Linux生成dump文件是为了记录系统崩溃时的状态和信息,以便进行调试和分析。生成dump文件的过程可以通过以下几个步骤来实现: 第一步:安装和配置kdump kdump是Linux系统的一个内核崩溃转储的工具,需要先安装和配置好该工具。可以通过以下命令进行安装和配置: yum -y install kexec-tools 在/etc/kdump.conf配置文件中可以设置生成dump文件的存储位置和大小等参数。 第二步:启用kdump服务 启用kdump服务后,系统在遇到内核崩溃时就会自动转储dump文件。可以通过以下命令来启用kdump服务: systemctl enable kdump.service systemctl start kdump.service 在kdump服务启动后,可以通过以下命令来检查kdump服务的状态: systemctl status kdump.service 第三步:触发内核崩溃并生成dump文件 在系统发生内核崩溃后,dump文件会被自动转储并存储在预先配置好的路径中。可以通过以下命令来手动触发一个内核崩溃: echo c > /proc/sysrq-trigger 在触发内核崩溃后,可以使用以下命令来检查dump文件是否已经生成: ls -lh /var/crash/ 如果dump文件已经生成,可以使用以下命令来查看和分析dump文件: crash /path/to/vmlinux /path/to/dumpfile 以上就是Linux生成dump文件的步骤,通过这些步骤可以方便地生成和分析dump文件,从而更好地进行系统调试和故障排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值