WINDBG配置

Source Path:srv*
D:\dream\runtime-8.0.13\coreclr\gc
D:\dream\runtime-8.0.13\coreclr\vm
Symbol Path:srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols
WINDBG相关命令
命令 | 描述 | 来源 | 备注 | 示例 |
|---|---|---|---|---|
.cls | 清空界面显示 | WINDBG | ||
.chain | 显示WINDBG加载的插件 | WINDBG | ||
.hh | 查看WINDBG命令帮助信息 | WINDBG |
| |
.load | 加载插件 | WINDBG | 一般.NET程序运行会自动加载SOS | |
.reload | 重新加载/下载符号文件 | WINDBG | ||
~0s | 切换到0号线程 | WINDBG | ||
~* k | 查看所有线程非托管栈 | WINDBG | ||
~*e | 在所有线程执行自定义命令 | WINDBG |
| |
!address | 查看目标进程内存使用情况 | WINDBG |
| |
bp | 添加断点 | WINDBG |
| |
bc | 清除断点 | WINDBG |
| |
da | 以ASCII编码显示内存地址 | WINDBG | ||
dd | 显示4个字节数据 | WINDBG | 后接 | |
dq | 显示8个字节数据 | WINDBG | ||
dp | 根据32位/64位程序,显示一个指针的数据。 | WINDBG | 32位显示4个字节;64位显示8个字节。 |
|
dt | 显示非托管类型结构 | WINDBG |
| |
du | 以Unicode编码显示内存地址 | WINDBG | ||
dv | 显示当前局部变量 | WINDBG | ||
!dlls | 显示所有加载模块的基地址、入口点 | WINDBG | ||
!dh | 显示指定模块的文件头 | WINDBG | 参数为模块的基地址,可使用 | |
g | 被调试程序继续运行 | WINDBG | ||
k | 显示当前线程非托管堆栈 | WINDBG | ||
lm | 显示当前加载模块 | WINDBG |
|
|
p | step | WINDBG | 逐过程调试 | |
pc | step to next call | WINDBG | 跳到下一个call | |
pt | step to next ret | WINDBG | 跳到下一个ret | |
poi | 对指针进行解引用 | WINDBG |
|
|
q | 退出(quit) | WINDBG | 退出调试,并且关闭被调试的程序 | |
qd | 退出并分离(quit and detach) | WINDBG | 退出调试,并且分离被调试的程序。不会关闭被调试程序 | |
r | 显示所有寄存器信息 | WINDBG |
| |
sxe ld | 在加载指定模块时中断 | SX |
| |
sxd ld | 在第二次加载指定模块时中断 | SX | ||
t | trace | WINDBG | 逐语句(跳入) | |
tc | trace to next call | WINDBG | 跳入到下一个call(会递归找到最后一个call) | |
tt | trace to next ret | WINDBG | 跳入到下一个ret(会递归找到最后一个ret | |
u | 显示该内存地址的后8条指令 | WINDBG |
| |
ub | 显示该内存地址的前8条指令 | WINDBG |
| |
uf | ||||
x | 查找非托管对象方法或类型(支持模糊查找) | WINDBG |
|
SOS相关
命令 | 描述 | 来源 | 备注 | 示例 |
|---|---|---|---|---|
!help | 帮助 | SOS |
|
|
!clrstack | 显示当前线程托管堆栈 | SOS |
|
|
!cpuid | 查看CPU核心频率、核心数等信息 | SOS | ||
!bpmd | 添加断点 | SOS |
| |
!dumpdomain | 显示应用程序域相关信息 | SOS | ||
!dumpassembly | 显示程序集信息 | SOS | ||
!dumpmodule | 显示模块信息 | SOS |
| |
!dumpmt | 显示方法表信息 | SOS |
| |
!dumpmd | 显示方法描述 | SOS | ||
!dumpclass | 显示eeclass信息 | SOS | ||
!dumpobj(!do) | 显示实例信息 | SOS | ||
!dumpvc | 显示值类型对象(struct)信息 | SOS |
| |
!dumparray(!da) | 显示数组 | SOS |
| |
!dumpheap | 显示托管堆中对象 | SOS |
| |
!dumpstackobjects(!dso) | 显示托管栈对象 | SOS | 部分变量在 | |
!dumpStackObjects (dso) | 显示当前调用栈上的所有托管对象的信息 | SOS | ||
!eestack | 查看当前线程非托管栈和托管栈 | SOS | ||
!eeheap | 查看Loader、GC堆数据 | SOS | 查看GC堆各代区段 |
|
!fq | 查看终结器队列信息 |
| ||
!gcroot | 查看对象引用根 | SOS | ||
!gcwhere | 查看对象在第几代 | |||
!ip2md | 根据给定JITTED Code Address,找到对应的MethodDesc | SOS | Given an address in managed JITTED code, | |
!name2ee | 根据名称找到对应的eeclass | SOS |
|
|
!objsize | 显示对象占用大小 | SOS |
|
|
!PrintException(!pe) | 显示异常具体信息 | SOS | ||
!runaway | 查看各线程占用时间片总时间 | SOS | 可排查CPU占用高的问题,查看占用时间片较多的线程,切入后查看线程栈。 | |
!savemodule | 将模块代码导出到dll | SOS |
| 导出模块后,反编译dll查看对应的代码 |
!syncblk | 显示同步块信息 | SOS |
| |
!threads(!t) | 显示所有托管线程 | SOS | 可查看线程中的异常信息 | |
!threadpool | 显示线程池的基本信息,包括队列中请求的数量、完成端口线程的数量和计时器的数量。 | SOS | 可查看当前cpu占用 | |
!u | 显示该内存地址汇编代码(带有托管信息,相对于u更详细) | SOS | 仅显示进行JIT后的代码 |
|
SOSEX(仅支持.NET Framework)
需单独下载,并加载。
命令 | 描述 | 来源 | 备注 | 示例 |
|---|---|---|---|---|
!sosex.mbp | 在源码指定行数打断点 | SOSEX |
|
|
!sosex.mx | 搜索包含指定字符的托管类型、字段、方法 | SOSEX |
|
|
!sosex.dlk | 查看死锁信息 | SOSEX | ||
!sosex.mdt | 显示指定类型结构 | SOSEX |
| |
!sosex.mfrag | 显示托管堆FREE块信息 | SOSEX | 检查托管堆什么对象导致FREE块无法合并 | |
!sosex.strings | 在托管堆中搜索指定字符串 | SOSEX | 可指定几代堆、筛选字符、字符长度 |


