在windows下,异常的调试很便捷,除了使用vs调试外还可以使用微软的windbg,windbg一般在安装vs的时候可以选装(windows开发套件),如果你是使用vs的开发者,那可以去磁盘中搜索windbg.exe看看有没有在安装vs的时候安装windbg,如图:
![](https://img-blog.csdnimg.cn/img_convert/7a9c12dbc2c76374c50bf7c8a8872a93.png)
如果没有安装windbg也没关系,可以去微软的官网下载
![](https://img-blog.csdnimg.cn/img_convert/d703aac1d3aa62479ea74d6f0460725e.png)
windbg需要注意的是系统环境变量配置
windbg需要使用很多windows系统库文件,各种系统dll,首先在环境变量中添加你windbg的安装目录
找到windbg的安装路径,windbg访问符号需要两个文件(SYMSRV.DLL 和 SYMSTORE.EXE)所以添加主path环境变量中它们的路径进去,即:你的windbg安装目录
(环境变量的设置方法:我的电脑--右键属性--高级系统设置--高级--环境变量--系统变量;在path中添加windbg的安装路径)
例如:
![](https://img-blog.csdnimg.cn/img_convert/514f4b7c3c58b077f26cf12bd19772ac.png)
![](https://img-blog.csdnimg.cn/img_convert/87fa81fc08a898f8eda0f08362b06098.png)
这里配置了x86的windbg路径
还需要配置符号文件目录,符号文件一般都是从微软的服务器上直接下载,因为你使用windbg的系统版本以及你程序的编译版本未指定,所以windbg需要你在系统环境变量中指定_NT_SYMBOL_PATH变量
再新建一个环境变量:新建一个环境变量_NT_SYMBOL_PATH 值为: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols(此处的作用是用于缓存符号服务器形式的符号文件)
![](https://img-blog.csdnimg.cn/img_convert/0f1f3271a731270a06e5618f68448c05.png)
至此使用windbg的前置条件就配置好了
下面是windbg的简单使用
注意:将整个文件夹都拷贝出来,文件夹的位置在一开始使用everything查询,找到Debuggers整个复制出来,里面有x86目录,该文件夹对应的是32位windgb程序,该程序所需要的前置配置上文已经说明过了
![](https://img-blog.csdnimg.cn/img_convert/2d7fe460f0e63857c131330c4a229427.png)
打开x86目录下的windbg
![](https://img-blog.csdnimg.cn/img_convert/c44d1258002b2a72a5afb2785707f35f.png)
在里面输入pdb文件目录以及符号文件目录,多个目录用;隔开
![](https://img-blog.csdnimg.cn/img_convert/785c7a7b60e614d4c0b631c9719e4fe6.png)
C:\Users\ljl\Desktop\win32(msvc); //pdb文件目录
SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols //符号文件目录,后面的网址是符号服务器,首次运行windbg需要从服务器下载
然后将dump文件拖入windbg窗体或者通过
![](https://img-blog.csdnimg.cn/img_convert/9dbbfa191f5d05594ff46b043c3b6569.png)
我这里已经打开过dump文件了所以是灰色的
首次打开需要等待下载符号文件
![](https://img-blog.csdnimg.cn/img_convert/e3ba6381328947f8aae88d7e58fb0fdf.png)
图中表示几个路径识别成功,省略号表示在下载,这里是已经下载好了的(已经提前试验过可行才写的博客)
输入.excr 跳到错误位置
![](https://img-blog.csdnimg.cn/img_convert/384d8b0a2ee0aab22de0a2bfa97cfdbc.png)
![](https://img-blog.csdnimg.cn/img_convert/672a2cf0a01bfc2780770f7312bc48da.png)
附: 运行 kv 命令以获得实际的异常的调用堆栈。
键入 ~*kb 要列出所有进程中线程