background image

  在应用程序运行时,利用输出信息的输出函数这种方式正是事后调试的一
个例子。此时您并未实际监控应用程序的执行,也没有尝试找出应用程序运行过
程中的问题,而是将信息转储出来,并等待执行完成。

  在交互式调试难以实现的情况下,这一特殊的调试方法广受人们的欢迎。例
如,实时调试

 CGI 应用程序基本上是不可能实现的,因为应用程序在远

   务

   

执行,且由第二应用程序(

Web 服务器)执行。不可能实时监控脚本执行。

  因此,事后调试有其用武之地,但也有一些显而易见的局限性。举例来说,
在不更改代码的情况下,您无法监控任何变量,而一旦更改了代码,您就必须
再次运行程序,以获得期望的输出。

  同样,您无法逐行单步调试程序的执行。必须运行整个应用程序,除非您强
行停止它。如果要跟踪函数调用和序列,就需要添加输出语句,以显示作出的是
怎样的决策,并显示顺序与序列,除此之外,别无他法可监控或获得信息。

  实时调试

  有多种实时调试系统(

Perl 自带的调试

 

器就是其中之一),您可从使用

-d 

命令行选项入手(参见清单

 2)。该命令行选项会启动一个交互式会话,通过此

会话即可逐行单步调试、跳过代码段、监控变量和值,甚至在执行过程中修改值。

清单

 2. 

 

使用

Perl 调试器

 
$ perl -d -e 0 
 
Loading DB routines from perl5db.pl version 1.28 
Editor support available. 
 
Enter

 h or 'h h' for help, or 'man perldebug' for more 

help.

 

 
main::(-e:1):  0 

本例中的文本界面很清晰,但依然难以理解发生了什么事、显示了什么信息、当
前在代码特定部分中的哪处执行。