找回密码
 立即注册
首页 业界区 安全 总结Dump抓取和分析方法(一)

总结Dump抓取和分析方法(一)

阴昭昭 2025-7-26 18:39:42
1.系统生成Dump设置


  • 打开蓝屏Dump收集设置,可以设多种dump类型。在系统》系统信息》高级系统设置》告警》启动和故障恢复》设置。可以配置崩溃时生成的dump类型。
有小内存转储 ,核心内存转储、完全内存转储、自动内存转储、活动内存转储。小内存转储(256KB)保存最小关键信息(如错误代码、故障线程等),文件小(约2-50MB),适合快速定位常见崩溃原因。C:\Windows\Minidump\核心内存转储:记录内核模式内存(系统核心、驱动等),排除用户程序数据。文件大小约GB级,平衡了实用性与空间占用。完全内存转储:保存物理内存全部内容(包括用户程序数据)。文件极大(等于物理内存大小),仅用于极端疑难问题。自动内存转储: 动态调整转储文件大小(基于系统运行时内存占用),优先保留最新故障数据,节省磁盘空间。活动内存转储:专为服务器设计,可捕获故障时关键进程内存(无需停机),文件较小,减少服务中断影响。 一般推荐核心内存转储内容比较详细,若是有时候崩溃无dump,那可以设置小内存转储。 
2.应用生成Dump设置

 
方法 1:通过注册表(WER LocalDumps,精准控制单个应用)


  • 定位路径:


  • 全局生效(所有应用):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
仅针对特定应用(如MyApp.exe):在LocalDumps下新建子键,命名为应用的进程名(如MyApp.exe)。

  • 添加配置项(在目标键下右键→新建字符串 / DWORD 值):


  • DumpFolder(REG_EXPAND_SZ):指定 dump 保存路径(如C:\MyAppCrashDumps,需确保目录存在)。
  • DumpCount(REG_DWORD):最多保存的 dump 文件数。
  • DumpType(REG_DWORD):1:小内存转储;2:完全内存转储。
执行dump.bat对所有应用崩溃生成dump。执行MyAppDump.bat对指定应用崩溃生成dumpdump.batMyAppDump.bat方法 2:使用微软工具 Procdump(灵活监控,支持运行中进程)


  • 下载 Procdump:从微软官网(ProcDump - Sysinternals)下载,解压到任意目录。
  • 命令行监控:


  • 针对已运行的进程(如MyApp.exe的进程 ID 为1234):
  • cmd
procdump -e -ma -o C:\MyAppCrashDumps\ 1234- -e:进程崩溃时捕获 dump;- -ma:生成完全内存转储;- -o:覆盖已有文件;- 最后跟进程 ID或进程名(如MyApp.exe)。

  • 针对未启动的进程(启动时自动监控):
  • cmd
procdump -e -ma -o C:\MyAppCrashDumps\ -w MyApp.exe

  • -w:等待MyApp.exe启动后开始监控。
procdump官方解释很多用法:ProcDump - Sysinternals.NET程序崩溃了怎么抓 Dump ? 我总结了三种方案 - 一线码农 - 博客园方法3:通过环境变量配置(运行时自动生成)适用.Net应用


  • 设置环境变量(启动应用前配置):


  • 临时生效(命令行启动时):
 set DOTNET_DbgEnableMiniDump=1 // 启用崩溃时生成dumpset DOTNET_DbgMiniDumpName=C:\DotNetDumps\app.dmp // dump保存路径set DOTNET_DbgMiniDumpType=2 // 2=全内存转储(Heap),1=小转储(Mini) (.NET Framework 用 COMPlus_ 前缀,如 COMPlus_DbgEnableMiniDump=1,效果相同。)

  • 永久生效:在系统环境变量中添加上述键值对(电脑→属性→高级→环境变量)。

  • 启动应用:通过命令行或 IDE 运行,应用崩溃时自动生成 dump 到指定路径。
参考:如何在.NET程序崩溃时自动创建Dump? - jack_Meng - 博客园在发生故障时收集转储 - .NET方法4:任务管理器手动创建

通过任务管理器,右键应用进程,创建存储文件。可以在应用卡住的时候进创建。  
3.分析Dump

 

  • 安装 Windbg:通过微软商店搜索 “WinDbg Preview” 安装最新版本,或从Debugging Tools for Windows下载。
  • 微软介绍如何使用Windbg分析Dump:使用 WinDbg 分析故障转储文件 - Windows drivers
  • WinDbg上有内置帮助系统在WinDbg中输入 .hh 或 !analyze -? 查看命令详细说明
  • 常用的dump分析的命令
!analyze -v 自动诊断崩溃原因(必执行) 输出异常代码、责任模块、线程上下文lm 列出已加载模块 检查驱动版本是否匹配!process 0 0 显示所有进程信息(PID、PEB地址) 定位触发崩溃的进程(如Image: PinyinUp.exe) 堆栈与线程kbn 显示当前线程调用栈(含参数) 从底部查找含except的线程~*kbn 显示所有线程堆栈 定位阻塞线程(如长时间WAIT状态).ecxr 切换到异常上下文 需先执行.exr -1 内存与资源!vm 或 !memusage 虚拟/物理内存统计 检测内存泄漏或碎片化!heap -s 堆内存分析(用户态) 检查内存块分配/释放情况!address [地址] 查看内存属性(如是否可写) 用于分析非法内存访问 高级诊断!locks 检查内核锁竞争 结合!cs分析死锁!handle -f 显示句柄信息 排查资源泄漏(如未关闭的文件句柄)!dlls -l 列出进程加载的DLL 

  • 更多常用命令windbg 常用命令详解_bmvm.bpb-CSDN博客 ;WinDbg 命令三部曲一)WinDbg 命令手册 - sangmado - 博客园
  • 利用AI帮忙分析dump信息。
关键词技巧:详细分析下面的dump日志信息,并且再输入哪些命令能够更加详细日志信息。附上!analyze -v信息这样向AI提问可以让AI帮忙给出更多命令指导。

  • 分析Dump的方法还需要继续积累学习需要靠经验。应用的Dump可以通过VS调试。
 
5.VS进行调试应用dump

 
通过visual studio进行dump文件调试和分析_vs调试dump文件-CSDN博客Visual Studio 高级调试-Dump分析_visual studio dump调试-CSDN博客使用Visual Studio分析.NET Dump_visual studio查看dmp文件-CSDN博客 后续再继续补充更多分析dump的方法和VS进行调试应用dump的方法!
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册