Stamp of Software Debugging
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
navigation bar seprate line
第6篇 调试器

调试器(Debugger)是解决复杂软件问题的最重要工具。如果把软件调试技术比作一门武功,那么调试器就是应用这门武功时所必不可少的武器。

简单来说,调试器就是用来提供调试功能的软件或硬件工具。到底提供哪些功能才能称得上是调试器没有明确的标准呢?我们通常认为一个调试器至少应该具有如下两项功能:

1. 可以控制被调试程序的执行,包括将其中断到调试器,单步跟踪执行,恢复运行,设置断点等。

2. 可以访问被调试程序的代码和数据,包括读写数据,观察和反汇编成代码,读写寄存器等。

以上两项功能是相辅相成的,前者让被调试程序根据调试人员的要求运行或停止,后者对其进行分析。二者结合起来,就可以将被调试程序中断在几乎任意的时间或空间位置,然后对其进行观察、分析和修改,待分析结束后再让被调试程序继续运行,这种调试方式被称为交互式调试(Interactively Debugging),这是区别调试器和其他普通工具的最重要标准。这种将被调试对象静止下来,然后无限期地“慢慢”分析其状态,而后再像什么也发生过似的让其继续运行的交互式诊断方法是软件调试所特有的,在硬件和传统的医学或其他领域都是很难施行的。例如,医生诊断心脏疾病时是不可能将病人的心脏停止在某个位置来观察的。

根据被调试程序的工作模式,可以把调试器分为用户态调试器和内核态调试器,前者用于调试用户态下的各种程序,如应用程序、系统服务,或者用户态的DLL模块;后者用于调试工作在内核态的程序,如驱动程序和操作系统的内核模块。在第28章我们将讨论调试器的通用模型、一般原理、基本任务和常见调试器的分类。

WinDBG是Windows平台中使用非常广泛的著名调试器,它既可以用作用户态调试器,也可以用作内核态调试器,是调试Windows操作系统下各种软件的一个强有力的工具。本篇的第29章和第30章将分别讨论WinDBG调试器的工作原理和使用方法。

调试器的设计初衷是为了辅助软件开发人员定位和去除软件故障,但因为调试器所具有的对软件的强大控制力和观察力,其应用早已延伸到了很多其他领域,比如逆向工程、计算机安全等。可以说,调试器是几乎所有软件高手的必备工具,他们都非常擅于使用调试器。因此,每个软件工程师都应该把学习和熟练使用调试器当作一门必修课。

navigation bar seprate line
Copyright (C) 2008-2013 Raymond Zhang, All Rights Reserved