windbg调试入门(一)

此篇为阅读vs官方教程后的笔记

WinDbg 入门(用户模式) - Windows drivers |Microsoft学习

1、下载windbg

有旧版和新版之分,本质上是一样的,新版可以直接从应用商店下载,搜索windbg preview,然后下载windbg

2、熟悉界面

3、编写一个除0错误程序

使用vs编写一段如下代码,在计算过程中,做除0操作,这会导致程序崩溃,无法正常打印出结果

在这个程序中,c的值被赋为0,当带入到func函数中的计算y时候,除0计算会导致程序崩溃,无法按期执行打印后面的x和y的值

在编写完成后,右键点击项目生成,然后在文件夹中查看,生成的Project1.exe程序和Project1.pdb文件,其中pdb文件为存储的符号表,需要和exe的生成版本,或者生产时间保持一致

4、使用windbg调试错误程序,在用户模式下(User-Mode)

打开新版windbg,选择运行exe,即点击launch executable

然后在弹出的窗口中选择Project1程序

加载后,程序就会自己运行,并且有代码源文件的情况下,也会直接加载出代码,

接着设置符号表和符号路径

在下面的0:000>位置输入命令

分别输入.symfix和.sympath+你的exe和pdb对应的文件夹目录

.symfix
.sympath+ C:\xxxx

输入后,会有如下提示,表示加载的符号表路径

然后再次输入.reload和bu 你的exe名称!main, 因为main一般是程序执行入口,然后再输入g,“.reload”代表重新加载程序,bu则是给你的exe在main函数位置打上断点,g表示执行程序

.reload
bu Project1!main
g

输入后,可以看到断点已经打在左侧main函数入口处,继续输入g开始执行

此时和vs的调试逻辑一致,按F11进行单步调试即可

5、触发程序崩溃,获取报错信息

当代码执行到第5行的时候,除0计算导致程序崩溃,windbg左侧的command命令行也反馈除报错信息,Integer divide-by-zero.xxxxx(first chance),如果继续执行则会继续报同样的错,xxxx(second chance)

6、分析报错信息

在命令行中输入! analyze -v,分析报错原因,当程序较大的时候,如几MB大小时,分析的时间也会增加,控制台显示BUSY的时候也会更多一些

等待分析结果出来后,可以看到给出了源文件的路径,代码,报错行

7、结语

结合上面的堆栈信息,代码报错位置一般都可以很直观的查看到原因,此时对于复杂的程序,还可以使用相关命令分析崩溃线程

最后调试完毕后,使用qd退出当前运行的程序,对于已经调试到崩溃步骤的程序,如果想重新调试,则需要重新launch exe,使用reload命令则无法重新加载

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值