WinDbg入门教程





摘自:灰狐\'s Blog


先容

在我的职业生活中,我看到咱们大多数都是使用Visual Studio来进行调试,而不是用其它许多免费的调试器。你可能有很多理由来使用这样的调试器,比如,在你家里的机器上没装开发环境,但是一个程序一次次的崩溃。实在依据堆栈的dump就可以断定出IE的崩溃是否是因为一个第三方的插件。

对于WinDbg,我泛亚娱乐|http://yuan01.bc88.info/fei/为止还不发明很好的疾速入门的教程。这篇文章联合实例探讨了WinDbg的使用。我首先假设你熟习调试的基础概念:stepping in, stepping out,断点以及远程调试的根本概念。

注意,这原来是座位一个入门的文档,你可以浏览并且开端使用WinDbg. 如果对特定的命令有疑难,请查阅WinDbg的文档。你可以在任何微软提供的调试器中使用这篇文章中提到的命令,比如在VS的命令行窗口中。

这篇文章是基于WinDbg 6.3.

这仅仅是一系列对于调试技巧的文章中的第一篇。在下一篇文章中,我会说明如何针对调试器编写扩大DLL.
调试器一览

下面大略介绍了你可以从微软网站高低载到的调试器:

? KD内核调试器。你可以用它来调试蓝屏一类的体系问题。如果是开发装备驱动程序是少不了它的。

? CDB命令行调试器。这是一个命令行程序

? NTSDNT调试器。这是一个用户模式调试器,能够用来调试用户模式利用程序。它实际上是一个CDB的windows UI加强。

WinDbg用一个美丽的UI包装了KD和NTSD。WinDbg即可以调试内核模式,也可以调试用户模式程序。

? VS, VS.net使用同KD和NTSD雷同的调试引擎,并且比拟于同样用于调试目标的WinDbg,提供了功效更丰盛的界面。
调试器之间的比拟













功能


KD


NTSD


WinDbg


Visual Studio .NET


内核模式调试


Y


N


Y


N


用户模式调试





Y


Y


Y


非托管调试


Y


Y


Y


Y


托管调试





Y


Y


Y


远程调试


Y


Y


Y


Y


附加到进程


Y


Y


Y


Y


从进程分别


Y


Y


Y


Y


SQL调试


N


N


N


Y
WinDbg

WinDbg实际上包装了NTSD跟KD并且供给了一个更好用的用户界面。它也提供了命令行开关,比方最小化启动(m),附加到一PID指定的进程(p)以及主动翻开瓦解文件(z)。它支撑三品种型的命令。

? Regular mands(比如: k) 用来调试过程

? Dot mands(比如:.sympath)用来把持调试器

Extension mands(比如: !handle)这些命令属于可以用来增加到WinDbg的自定义命令;它们用扩展DLL的输出函数来实现。
PDB文件

PDB文件指的是链接器天生程序数据库文件(Program database files)。私有的PDB文件包含私有以及公有符,,源代码行,,类型,局部以及全局变量。公有的PDB文件不包括类型,部分变量以及源代码行,信息。
调试场景
远程调试



















Remote.exe使用命名管道作为通信的方法。假如你使用的是一个命令行接口的程序,好比KD,CDB或者NTSD。你可以应用remote.exe来远程调试。留神:使用q(不是q)来退出客户端,不必关掉服务端。












即时调试

Windbg ?I。这个命令实际上是把注册表中 HKLMSoftwareMicrosoftWindows NTCurrentVersionAeDebug的键值设置成WinDbg。如果要把WinDbg设置成为默认的托管调试器,你须要显示设置如下的注册表键值:

HKLMSoftwareMicrosoft.NETFrameworkDbgJITDebugLaunchSetting 设置成 2
HKLMSoftwareMicrosoft.NETFrameworkDbgManagedDebugger 设置成Windbg.(注意其中的启动参数设置)


64位调试


托管运用程序的调试

托管代码实际上也是有PDB的,然而这个PDB实际上记载了C#代码和IL代码的对应关联以及相干的一些信息的概念,由于所有的程序都是编译成为ILASM。调试器通过CLR来查问所需的附加信息。











译注:CLR

09-04 04:42