文档介绍:UNIX系统开发-程序调试概述
对任何程序开发而言,程序的调试都是开发过程中的一个重要阶段。程序调试的目的就是找出程序中隐藏的故障,校正那些不正常的指令,使程序能够正常工作。
程序的调试有几种不同的级别。最高级别当然是编程人员通过自己肉眼观察和推断,找出那些有毛病的代码并修改之。最低级别是对汇编代码进行调试。由于汇编语言代码的复杂、冗长与不直观。在汇编级对程序进行调试是一件比较费力的事。但UNIX得开发环境提供了汇编级的调试工具adb。使用此调试程序可以找出程序执行失败的原因,并在受控的环境下执行程序。
使用得最多的大概还是源程序级即符号级的调试,在此种调试方式下我们能够把高级语言的语句当作一个可执行的最小单位,在调试程序中使用源程序中出现的符号和代码的行号来交互式地引用变量或控制语句的执行。
UNIX环境下进行符号级调试的工具有两个。一个是dbx,使用它可以确定程序崩溃的位置、显示变量和表达式的值,在程序中设置断点以及跟踪程序的执行,等等。这一调试工具主要来源于BSD 的UNIXT系统中使用的比较多。另外一个符号级的调试工具是sdb。sdb的最初来源于UNIX System V。它的功能同dbx类似。使用sdb,我们不仅能够在事后对某个程序进行调试,而且能够在程序运行中对之进行调试。
本章我们主要介绍sdb。
我们将要讨论的内容包括:
程序调试概述主要讨论一般的程序调试方法和大部分调试工具都提供的功能。
sdb的启动主要讨论在进入sdb时所涉及到的一些问题。
sdb的交互式命令主要介绍sdb提供的完成各种调试工作的命令的用法。
程序调试概述
所谓程序调试,就是找出程序中的错误,进行修改,使之能够正常地运行。“调试”这一词对应的英文单词为“debug”。
虽然程序调试同编程一样,是一项技巧性和经验性都非常强的工作,但总的来说程序调试还是有其一般性的。这种一般性不是指程序调试做法上的一般性,而是指程序调试中所用到的各种技术的一般性。例如,设置断点、控制指令的执行、显示或修改变量的值等。虽然各种语然有其各自不同的特点,各种调试工具在具体使用方法上也有所不同,但对于这些一般性的技术却是基本上相同的。
程序调试说到底也无非就是观察各指令的执行情况。而指令除了那些顺序执行的之外。其他也无非是条件分支、循环转移和函数调用几类。条件分支和循环转移地具体执行过程都是由条件控制的,而条件最终是由各变量构成的。函数调用则是参数的传递,而这些参数绝大部分是由程序中的变量充当的(有些参数是一些常量)。因此程序的调试过程,就是观察程序程序中各变量的值的变化过程,分析各个值出现的原因,并进而找出根源,排除之。
有了这种一般性的看法我们再回过头来理解程序调试和各种调试工具的使用就会觉得比较自然了。各种调试工具的最终目的都是要使用户能够方便地观察在某些指令被执行之后有关变量的值的变化情况。
归纳起来,程序调试中所用到的一些技术包括:
程序执行流程控制:主要指断点的设置、指令的单步或连续执行等。
变量的检查: 主要指显示或修改变量的值。这里的变量不仅仅指程序中自己定义的