cc682/NetRoc
http://netroc682.spaces.live.com/
调试器
本节包含以下内容:
工具包中的调试器
安装和设置
调试器操作
调试符号
崩溃转储文件
安全事项
调试器参考
工具包中的调试器
本文档描述4款Microsoft调试器的工作方式:
CDB 和 NTSD
KD
WinDbg
查看工具包中的完整列表以及他们的文档,参见工具列表和文档。
CDN、NTSD和WinDbg可以在Microsoft Windows 95、Windows 98、何Windows Millennium Edition上进行用户模式调试。但是,安装需要一些额外的步骤,并且功能上会有限制;查看Windows 95, 98, 和 Millennium获得更多信息。要在这些操作系统上进行内核模式调试,需要使用WDeb系列调试器(例如,wdeb386.exe),或者Microsoft Windows System Debugger(debugger.exe)。查看Windows Millennuim DDK获得关于这些工具的更多信息。
Microsoft Visual Studio调试器也可以在所有Windows系统上进行用户模式调试。可以查看Visual Studio的文档获得关于这些调试器的详细资料。
CDB 和 NTSD
CDB和NTSD是可以用来调试用户模式程序的命令行工具。除了启动的方式之外,这两个工具基本上是一样的。
本文档将使用“CDB”来同时提及CDB和NTSD。除非专门注明,否则所有提到CDB的地方,同样适用于NTSD。只有极少数技术是只能在CDB上工作或者只在NTSD上工作的。这些不同点都会在适当的地方指明。
CDB
Microsoft控制台调试器(Microsoft Console Debugger (CDB))是基于控制台字符界面的程序,它可以对Windows用户模式的内存和结构进行低层次分析。
CDB在用于调试正在运行的或者刚刚崩溃的程序时(“live analysis”)非常强大,但是很容易配置。它可以用于研究正在运行的程序行为。在应用程序出错的情况下,CDB可以用于获得调用堆栈,或者查看有问题的参数。由于是基于字符界面,它能够很好的支持网络访问(使用远程访问服务器)。
使用CDB,可以显示和执行程序代码,设置断点,查看或者改变内存的值。CDB可以通过“反汇编”分析二进制代码并显示汇编代码,也可以直接分析源代码。
由于CDB能通过地址或者全局符号访问内存地址,你可以通过名字而不是地址来访问内存,这使得定位和调试特定的代码变的容易。也可以显示反汇编的机器码。CDB支持调试多个线程和进程。它是可扩展的,并能够读写分页和非分页内存。
如果目标应用程序本身也是控制台程序,目标和CDB将共用一个控制台。如果想和目标程序分开使用控制台,可以使用-2 command-line option选项。
NTSD
Microsoft NT Symbolic Debugger (NTSD)是CDB调试器的变种。启动的时候,NTSD会创建一个新的文本窗口,而CDB继承原有的命令行窗口,除此之外,他们没有任何区别。
和CDB一样,NTSD完全支持控制台程序和Windows程序。(命名为“控制台调试器”,是为了指明CDB是一个控制台程序,而非指目标程序必须是控制台程序。)
使用 start 命令也可分离出来新的控制台窗口,所以下面两种格式的命令会有相同效果:
start cdb parameters
ntsd parameters
System32 目录下的NTSD
鉴于CDB只是Windows调试工具包的一部分,而NTSD同时包含在工具包和Windows系统中。所以在Windows的system32目录下可以找到NTSD。
如果准备使用在system32目录下的NTSD,有两个重要的地方需要注意:
- 该版本NTSD不支持通过调试器的远程调试
- 该版本的NTSD可能和当前文档中描述的版本不同。
为了避免这些问题,建议只使用Windows调试工具包中的NTSD和CDB。
用内核调试器控制CDB或者NTSD
CDB和NTSD的输入输出能够被重定向,所以可以通过内核调试器进行控制(KD或者WinDbg)。
这项技术如果用在CDB上,CDB的窗口将会出现,但是不能进行输入输出。如果使用在NTSD上,则不会有控制台窗口出现。
从内核调试器控制NTSD是非常有用的,因为它是一个非常轻量级的调试器,在运行目标程序的机器上,它几乎不会增加任何额外开销。这种结合可用于调试系统进程、关机、或者系统刚刚启动之后的情况。查看使用内核调试器控制用户态调试器 获得更详细的信息。
KD
Microsoft Kernel Debugger (KD) 是一款基于字符界面的控制台程序,可以在所有NT内核操作系统上对在内核模式下的活动进行深度分析。
KD可用于调试内核模式程序和驱动程序,或者监控系统本身的行为。KD支持多处理器的调试。
一般来说,KD并不运行在被调试的机器上。内核模式调试一般需要两台机器(主控机 和 目标机)。
大多数KD的命令不能像在CDB, NTSD, 和 WinDbg中一样针对特定进程或者线程。
调试不同平台的目标机
KD可以支持调试基于x86、Itanium或者x64平台的目标机。
调试器可以自动检测目标运行的机器平台,所以不需要在KD的命令行中指定了。旧的名字(使用I386KD或者IA64KD的名字)不再使用。
WinDbg
Microsoft Windows Debugger (WinDbg) 是一款强大的基于窗口的调试工具。它可以进行用户模式 和 内核模式 调试。
WinDbg支持完全的针对Windows内核、内核模式驱动、系统服务、以及用户模式应用程序和驱动的源码级调试。
WinDbg在进行源码级调试时,使用Microsoft Visual Studio调试符号格式。它可以访问具有PDB文件的模块的所有符号和变量,以及任何通过COFF格式符号文件(例如Windows .dbg文件)暴露出来的公开的函数名。
WinDbg可以查看源代码、设置断点、查看变量(包含C++对象)、查看调用堆栈及内存。用户可以通过它的调试器命令窗口适用大量的命令。
要支持内核调试,WinDbg需要两台机器(主控机 和 目标机)。内核调试只被基于NT内核的Windows系统支持。
WinDbg同样支持各种用户模式和内核模式目标的远程调试选项。
WinDbg可以看作图形界面的CDB / NTSD 或者 KD。