Windbg常用命令详解

目录

1、Windbg命令分类

2、常用的命令

2.1、.ecxr命令

2.2、kn/kv/kp命令

2.3、lm命令

2.4、.reload命令

2.5、!analyze -v命令

2.6、g命令

2.7、bp/bl/bc命令

2.8、~ns命令

2.9、.dump命令

2.10、r命令

2.11、.cls命令

3、windbg的帮助文档


10.0及以上版本的windbg支持了一些智能操作,不再需要输入一些复杂的命令去查看信息,只要点击一些超链接即可自动生成命令并执行,这比老版本的windbg要方便很多。但我们还需要去掌握一些常用的Windbg基本命令,这些命令是必须要掌握的,也是分析问题时频繁使用的。

图片[1]-Windbg常用命令详解-卡核

1、Windbg命令分类

       Windbg提供三大类型的命令:
1)标准命令:基本的调试命令,不区分大小写,比如g、kn、kv、lm等。
2)元命令:内建在调试引擎中命令,提供标准命令没有提供的功能,命令以.开头,比如.excr、.reload、.dump等。
3)扩展命令:用于扩展某一方面的调试功能,实现在动态加载的扩展模块中,以!开头。如!analyze等。

2、常用的命令

2.1、.ecxr命令

       该命令主要用在静态分析dump文件时,用来切换到发生异常的线程中,显示发生异常的线程的上下文。因为windbg打开dump文件时,并不会自动切换到发生异常的线程,需要我们手动使用该命令去切换,如下所示:

图片[2]-Windbg常用命令详解-卡核

在设置pdb路径或者使用.reload命令加载pdb文件后,需要再执行一下.ecxr命令重新切换到异常的线程中。

2.2、kn/kv/kp命令

       用来查看当前所在线程的函数调用堆栈。kn只是查看函数调用堆栈,kv可以查看函数调用堆栈中函数调用的参数:

图片[3]-Windbg常用命令详解-卡核

查看windbg的帮助文档,说kp命令可以查看到函数调用的参数,实际上并没有显示参数。

       有时程序有线程发生卡死,但不知是哪个线程卡死了,此时可以使用~*kn命令,将所有的线程的函数调用堆栈都打印出来:

图片[4]-Windbg常用命令详解-卡核

看哪些线程卡在WaitForSingleObject接口上了,尝试着找出发生卡死的线程。

2.3、lm命令

       用来查看进程空间中加载的dll库或者exe的信息,比如库的路径、时间戳、库的加载地址等。一般使用模糊匹配的模式,比如:lm vm testdlg*,其中,模块名称末尾要加上用于模糊匹配的*号;vm是给lm命令传递的参数。

       使用该命令,还可以查看目标库有没有成功加载pdb文件,如果成功加载了pdb文件,则会显示已加载的pdb文件的完整路径,如下:

图片[5]-Windbg常用命令详解-卡核

2.4、.reload命令

       用来加载pdb文件,一般用来强制加载某个pdb文件,比如:.reload  /f  hwcodec.dll。注意,这个命令中的名称要使用完整的文件名称。有时在windbg中设置pdb文件路径后,windbg没有去自动加载相关的库,此时就需要我们使用.reload命令去手动加载了。这个手动加载也称为强制加载。

2.5、!analyze -v命令

       执行该命令,可以输出当前异常的详细分析信息,比如异常码及异常描述,异常所在线程的函数调用堆栈等,如下:

图片[6]-Windbg常用命令详解-卡核

2.6、g命令

      Windbg在动态调试时,在中断模式下,执行该命令跳过中断,让程序继续运行。在将windbg附加到目标进程上时,附加成功后windbg会自动中断下来,如下:

图片[7]-Windbg常用命令详解-卡核

需要执行一下该命令,跳过中断。有些非致命性的异常也会让Windbg中断下来,也需要执行该命令跳过中断。

2.7、bp/bl/bc命令

       这些命令用来查看、添加、删除断点。在使用windbg对目标进程进行调试时,可以在windbg中对函数符号地址设置断点,bp从来添加断点,bc用来清除断点,bl用来查看当前设置的所有断点。

2.8、~ns命令

       该命令用于切换到n号线程中,其中n是线程的序号,如下:

图片[8]-Windbg常用命令详解-卡核

在用windbg分析问题时,我们可能要切换到多个线程中去查看信息,特别是在排查多线程死锁问题时。在GUI应用程序中,UI线程为0号线程,是GUI程序的主线程。

2.9、.dump命令

       该命令在动态调试时用来导出包含异常上下文的dump文件,比如.dump /ma D:\0628.dmp,执行效果如下所示:

图片[9]-Windbg常用命令详解-卡核

比如我们在同事的PC上查问题或者远程到客户的机器上用windbg动态调试,但一时半会又找不出问题,我们不能一直占用别人的电脑,别人还要用自己的电脑干活,一般这时我们会用.dump命令将异常的上下文保存到dump文件中,供事后分析。

2.10、r命令

       有时分析问题时,我们需要查看当前所有寄存器的值,使用该命令即可查看,如下:

图片[10]-Windbg常用命令详解-卡核

2.11、.cls命令

       清除当前屏幕显示。当Windbg的输出区显示的内容较多时,可以使用该命令讲输出区的内容清空。

3、windbg的帮助文档

       在windbg菜单栏中点击Help->Index,调出Windbg帮助文档,可以在该帮助文档查看所有命令的详细说明。比如查看.dump命令,在输入框中输入.dump关键字,左边的列表中会自动索引到对应的条目,双击之即可跳转到.dump命令的页面,如下:

图片[11]-Windbg常用命令详解-卡核

可以看到.dump命令的详细说明,也可以看到该命令都支持哪些参数以及参数的具体含义。

        这里有个地方需要注意一下,对于k命令,有很多子命令,输入k之后,会显示如下的匹配条目,必须点击最后一个条目才能跳转到对应的命令说明页面:

图片[12]-Windbg常用命令详解-卡核

点击中间的条目没法跳转。

© 版权声明
THE END
喜欢就支持一下吧
点赞9757赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容