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 |
可指定几代堆、筛选字符、字符长度 |