摘自:灰狐\'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 |