以前也用过windbg,没发现多好用,今天才发现没有pdb也能看到出错的module,今天研究了下记录下常用的命令吧。
(ps:设置ms符号表的方法,在file->Symbol file path弹出框中输入如下内容:SRV*E:\Projects\windows_symbols*http://msdl.microsoft.com/download/symbols 意思是把ms的系统dll的符号表下载到E:\Projects\windows_symbols)
lm -z c:\myapp.dmp 命令行打开故障转储文件(ps:其实可以通过菜单项选文件,老土的命令行)
.reload 重新加载符号表
!analyze -v 这条命令分析故障转储里的异常信息,确定异常发生的位置,调用栈,并显示详细的报告
.dump c:\test.dmp 调试程序的时候出现崩溃手动存储dump文件
lm 列出所有模块 lm m k* 显示已经加载的,以k开头的模块(模块太多的时候好用)
lm vm xxx 如果只有dump不知道对应的版本好可以使用该命令查看某个模块对应的版本号
kb 列出当前线程的栈信息
~*kb 列出所有线程的栈信息
kf 列出当前线程的调用栈中函数在栈中占用的空间大小,可以用于调试栈溢出的问题根源
~*kf 列出所有线程的调用栈中函数在栈中占用的空间大小,可以用于调试栈溢出的问题根源
runaway 在调试程序过程中使用该命令可以查看到程序的函数调用时间,来解决程序cpu占用很高的问题根源
q 退出调试
.kill 杀死调试进程
.restart 重新调试
| 显示进程
~显示线程
bp funname 让程序在某个函数名的地方断点
.symopt+0x40 设置强制加载不是完全匹配的pdb 然后.reload