Delphi 调试概述 除非你的程序只有几行,否则几乎不可能一次写成,因此调试就非常必要。然而许多初学者 不知道如何进行调试, 写完程序就运行, 发现结果不对再看代码, 这样觉得非常吃力。 这里, 简单介绍一下 Delphi 所提供的调试功能。 1. 语法检查(Syntax Check) Delphi 提供了语法检查的功能,这个功能和正常编译很相似,同样也会给出各类错误和警告 信息,但是不会生成代码。 必须重视 Delphi 给出的任何信息, 很多简单的错误就能够在这个阶段被发现。 Delphi 的编译 信息分为 4 类:Fault(故障) ,Error(错误) ,Warning(警告)和 Hint(提示) 。Fault 是指 导致编译程序不能继续
工作的错误,例如内存溢出等;Error 是指发现用户程序不符合某些 规定而导致不能按照用户程序的要求进行处理;Warning 是指用户程序使用了某些不符合规 定的形式, 但是并不影响编译程序生成目标文件; Hint 是指编译程序对用户程序的某些形式 提出了怀疑。 前两类信息是必须要解决的, 否则你不能运行你的程序, 但是往往会有很多人忽略后两种信 息。然而,这些信息却是非常重要的。 对于下面这个代码,编译程序将会出现一个 Warning: var a,b:Integer; begin ... if a<100 then if a<b then begin ... end; end. end. 编译程序会告诉你, (句号) 在“.” 后面的内容被忽略了, 实际上你会发现你漏了一个 begin, 同时将最后第二个 end 后面的“;”(分号)误写成“.”(句号)了。 再看看下面的代码: var a,b:Integer; begin b:=a+1; end; 编译程序会给出一个 Hint,告诉你 a 尚未被初始化, 通常没有被初始化的变量其内容是不确 定的。
由上可见,编译程序可以对你的程序进行初步的调试,协助你排除一些故障。 但是仅仅这样是完全不够的,需要更加强大的调试能力才能胜任更加复杂的程序调试任务。 2. 启动、暂停、中止集成调试程序 最基本、最重要的调试手段包括:单步跟踪、断点、变量观察、堆栈检查等。所有这些功能 在 Delphi 的集成调试程序中都能提供。 当你按下 F9(Compile and Run,编译并运行)一个程序时,就已经启动了
Delphi 的集成调 试程序,而按下 Ctrl+Break(Program Pause,程序暂停)时则会暂停被调试程序返回到集成 调试程序中去,再次按下 F9 会从暂停地地方继续执行,而 Alt+F2(Program Reset,程序复 位)则会完全中止被调试程序的执行,返回集成调试程序中去。 3 单步跟踪(Step) 所谓单步跟踪是指一行一行地执行程序, 每执行一行语句后就停下来等待指示, 这样你就能 够仔细了解
程序的执行顺序,以及当时的各种状况。 注意:虽然 Object Pascal 允许在一行
内书写任意多的语句,但是所有的单步跟踪都以“行”为 单位,因此为了便于调试,主张在一行内只写一条语句,否则会给你带来很大的麻烦。 单步跟踪可以分为 Step Over(跳过) 、Trace Into(跟踪进入)和 Trace to Next Source Line(跟 踪到下一条源代码行) 。 Step Over 和 Trace Into 都是执行一行语句,差别在于遇到过程和函数时 Trace Into 将会进入 过程和函数,而 Step Over 不会,而只会把过程和函数作为一条语句执行。 当使用 Ctrl+Break 暂停程序时,程序不一定停在你的源代码位置上,而可能是在操作系统或 者其它模块中,此时集成调试程序会出现一个 CPU 窗口(CPU Window) ,用汇编指令的形式 显示当前的内容,可以用 Trace to Next Source Line 继续执行程序,直到程序执行到第一条有 源代码的地方。 4 断点(Breakpoint) 断点是调试中非常重要的一个手段。 由于在执行到某些代码前需要执行许多其它代码, 不可 能用单步跟踪一条一条执行过来, 这时只要在需要暂停的地方设置一个断点, 然后让程序运 行,当执行到这个断点位置时不需要用户干预就会暂停并返回集成调试程序。