windbg使用超详细教程(我是新手,大佬轻虐)
版本0:2018.4.20
以前一直都是使用的vs和和日志文件调试,近来接触到windbg(额外提一句,好多公司要求上面写的windgb~~)
下载,下载官方版本
直接就是下载了 还挺省事
安装,打开exe 我选择了下载
next
next
download 然后等待下载完成
打开X64 Debuggers And Tools-x64_en-us.msi 要安装对应系统位数 不然打不开
安装完成后没有反应。。。。。也是醉了。还以为我弄错了呢 开始菜单有 如果找不到可以从右侧路径找(我的高级打码 嘿嘿)
吃饭去 回来继续
版本1:2019年7月29日
饭吃完了,那下面咱们继续。
版本2:2019年8月25日
由于上次吃完饭,没收拾碗筷,所以又忙活了几天。
首先写一些用过的用法。(本身想着弄个超详细的基本教程的,现在发现貌似没有时间弄)
配置
设置自己的pdb文件路径以及代码路径(后续默认已经设置过自己的路径了)
具体设置没有放图,是因为每个人的路径不一直,放了怕误导。
1.使用dump文件查找崩溃的位置
首先打开dump文件。
输入!analyze -v(原来写的!anaylze -v 感谢尚逸的提醒) 查看数据
输入!anaylze -v 查看数据
发现什么都没有
输入~*kbn 查看所有的线程
然后向上查找KERNELBASE!UnhandledExceptionFilter+0x25a 这个一个 未处理的异常
输入~*kbn 查看所有的线程
复制第三个参数00b8d9d0
输入 dd 00b8d9d0
输入 dd 00b8d9d0
然后输入 .exr 00b8db60(第二个参数)查看上下文 .cxr 00b8dbb0 (第三个参数)
.exr 00b8db60(第二个参数)查看上下文 .cxr 00b8dbb0 (第三个参数)
然后kbn
kbn
然后发现自己熟悉代码
双击崩溃位置,发现跳不过去
打开call stack
打开call stack
双击崩溃的位置
双击崩溃的位置
成功跳转代码
打开local
打开local
查看崩溃前的数据
查看崩溃前的数据
这里就可以找到错误的位置以及出问题的原因了。
2.调试程序,由于某些情况下,pdb与现在版本不一致(vs中修改了些的代码,或者vs抽风)vs无法附加进程,但是bug又是偶现的,好不容易出现一次又不能破坏现场。就可以直接使用windbg直接附加到进程进行调试程序。
此时程序会暂停
打开cpp文件
点击上面的小图标,可以打开调用堆栈等窗口。
选中你需要调试的代码F9添加断点,跟vs一致
添加断点
F5或者输入g 继续运行
可以看到当前运行的数据都可以看到了。
好了先这样,继续吃饭了。