阴昭昭
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)。
procdump -e -ma -o C:\MyAppCrashDumps\ -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的方法!
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |
|
|
|
相关推荐
|
|