WinDbg DUMP 调试
设置符号路径
可以在命令行中通过 .sympath
命令来设置符号路径,也可通过 菜单项
来设置。
符号路径有两种,一是本地路径,例如:D:\MySymbols
;二是远程服务器路径,例如 SRV*CachePath(本地缓存)*RomotePath(远程服务器)
。
多个符号路径通过 “;
” 连接。
- 命令行
.sympath D:\MySymbols;SRV*D:\MsSymbols*http://msdl.microsoft.com/download/symbols;SRV*D:\AppSymbols*http://***.cn/symbols/app
- 菜单(File -> Symbol File Path…)
D:\MySymbols;SRV*D:\MsSymbols*http://msdl.microsoft.com/download/symbols;SRV*D:\AppSymbols*http://***.cn/symbols/app
如上操作设置了三个符号路径,首先是本地路径 D:\MySymbols
,然后是从 Microsoft符号服务器
缓存符号文件到 D:\MsSymbols
,最后是从 APP符号服务器
缓存符号文件到 D:\AppSymbols
。
基础命令
- 命令
- 基本命令:40多个
- 使用 “?” 查看所有
- 元命令:100多个
- 使用 “.help” 查看所有
- .help /D a* : 链接方式显示
a
开头的命令 - .hh : 打开CHM
- .help /D a* : 链接方式显示
- 命令前加前缀 “.”
- 使用 “.help” 查看所有
- 扩展命令
- .chain : 查看所有扩展
- !模块名.help : 查看模块内的命令(!ext.help)
- 命令前加前缀 “!”
- 基本命令:40多个
- 基本设置
- 清屏命令:.cls
- 设置进制命令:n [8|10|16]
- 处理器模式指令:.effmach [](Effective Machine Type,.effmach x86)
- 格式化显示:.formats 0xa
- 调试
- 挂载进程:Windbg –p PID;Windbg -pn 进程名
- 打开DUMP文件:.opendump 文件名
- 解挂进程:.detach
- 结束当前调试会话:q | qq | qd
- 黑科技
- .crash : 引发一个系统蓝屏,生成 Dump 文件
- .reboot : 使系统重启,不产生 Dump 文件
调试方法
- 帮助
? : help on commands that affect the debugee
.help : help on commands that affect the debugger
.hh command : view the on line help file
!help : help on the extension dll at the top of the chain (e. g., SOS)
- 符号加载
.sympath : 设置符号路径
.symfix : 自动将符号路径设置为 MS 公有符号服务器
.reload : 枚举已加载的模块,寻找符号文件
.reload /f /i Test.exe : 强制加载
- /f : 强制加载
- /i : 不检查 pdb 的版本信息
- /v : 将搜索过程中的详细信息都显示出来
- .reload /f Test.exe=0x400000,0x<imagesize>,0x<timestamp>
!sym : 加载选项
- !sym noisy : 可以将整个加载symbol的过程打印出来
- !sym quiet : 不显示 symbol 加载过程
- 符号匹配
.symopt:查看当前设置的符号选项
.symopt+ 0x40:exe和pdb松匹配
.symopt- 0x40:恢复严格匹配
.reload /f /i test.exe:忽略匹配,强制加载
- 加载
SOS
扩展
.loadby sos clr
!eeversion // 查看sos版本
- 查看堆栈
!analyze // 非托管
- v : 显示异常的详细信息
- f : 强制将任何事件都当作异常来分析
!dumpstack // 托管+非托管
!EEStack : 对每个活跃的线程调用 DumpStack
- ee : 托管代码
- short : “感兴趣” 的线程
!clrstack // 托管
!ClrStack -l : 显示局部变量信息
!ClrStack -p : 显示托管代码帧栈的所有参数
!ClrStack –a :-l & -p
~*e!clrstack
~0e!clrstack
!pe : Print Exception
!PrintException <address>
- 查看对象
.exr : displays the contents of an exception record
.cxr : displays the context record saved at the specified address
!DumpObj <Object address>
!IP2MD <Code address>
!DumpIL <MethodDesc>
- 查看文件头
lm // list loaded modules
- v : 详细信息
- m *?* : 通配符
- a ? : 地址
!dh AppName.exe
- 线程调试
!threads : 查看所有线程(可以看到哪个线程有异常)
~*s : 切换线程
!runaway : 查看线程CPU运行时间
.ttime : 查看线程耗时
!threads : 查看所有托管线程
!threads : view managed threads
!clrstack : view the managed call stack
!dumpstack : view combined unmanaged & managed call stack
!clrstack -p : view function call arguments
!clrstack –l : view stack (local) variables
!name2ee module class : view addresses associated with a class or method
!dumpmt –md address : view the method table & methods for a class
!dumpmd address : view detailed information about a method
!do address : view information about an object
!dumpheap –stat : view memory consumption by type
!dumpheap –min size : view memory consumption by object when at least size
!dumpheap –type type : view memory consumption for all objects of type type
!gcroot address : view which object are holding a reference to address
!syncblk : view information about managed locks
.load C:\CurrectFiles\sos (C:\Windows\Microsoft.NET\Framework\v4.0.30319)
相关工具
- DIA SDK
- DumpBin.exe
- C:\Program Files (x86)\Debugging Tools for Windows (x86) (Microsoft)
- symstore.exe : 符号存储(创建目录层级)
- symsrv : 符号管理与获取
- symchk.exe
symchk.exe D:\MsSymbols\cfgmgr32.dll\4CE7B78727000\cfgmgr32.dll -v -s D:\MsSymbols symchk.exe D:\AppName.exe -v -s SRV*D:\AppSymbols*http://***.cn/symbols/app
- cdb.exe : 命令行调试
- breakpad\crashpad (Google)
- Client : 捕获异常,生成 DUMP 并上报
- Symbol dumper : 根据调试信息生成符号文件
- dump_syms : 生成符号文件、符号文件转换
- generate_breakpad_symbols.py:自动生成所有符号文件(包括目录)
- Processor : 调试器
- minidump_stackwalk : 调试