6、 lmf
列出当前进程中加载的所有dll文件和对应的路径
奇怪没找到我程序里边加载的dll 乖乖滴.难道attach 进程把dll关了吗? 用空用dump 试试.
11!runaway 可以显示每一个线程的cpu消耗
这个命令挺好,直接找到哪个线程占得时间久 ,如果一直占着,那这个线程里边一定是有死循环,或者不停的操作某个东西
线程6号 占用时间1分钟31秒
我看有人通过抓dump 才查看,那种应该是最准的吧, windbg 附加到进程里之后,程序卡掉了,占资源的dll 也停下来了.
通过dump多抓几次,每次都一样占时间的那个线程就是问题所在的线程.
12、 ~ 命令是用来切换目标线程
0:018> ~ 可以显示线程的信息
0:018> ~0s 把当前的线程切换到0号线程,也就是主线程,切换后提示符会变为0:000.
13 、~* 命令列出当前进程中的所有线程的详细信息
14、~*kb 命令列出所有线程的堆栈
15、 k 命令用来显示当前线程的堆栈,如下
转到六号线程
没有多少信息
15、 k 命令用来显示当前线程的堆栈,如下
0:018> k
跟d命令一样,k后面也可以跟很多后缀,比如kb kp,kn,kv,kl等,这些后缀控制了显示的格式和信息。
栈指令k[b|p|P|v]
这四条指令显示的内容类似,但是每个指令都有特色;
KB显示三个参数;
Kp显示所有的参数,但需要Full Symbols或Private PDBSymbols支持。KP与Kp相似,只是KP将参数换行显示了;
Kv用于显示FPO和调用约定;
KD,用于显示Stack的Dump,在跟踪栈时比较有用。
这些指令区分大小。
16 、u 命令把指定地址上的代码翻译成汇编输出
0:018> u 7739d023
USER32!NtUserWaitMessage:
7739d023 b84a120000 mov eax,0x124a
7739d028 ba0003fe7f mov edx,0x7ffe0300
7739d02d ff12 call dword ptr [edx]
7739d02f c3 ret
如果符号文件加载正确,可以用uf命令直接反汇编整个函数,比如uf USER32! NtUserWaitMessage