在应用程序运行时,利用输出信息的输出函数这种方式正是事后调试的一
个例子。此时您并未实际监控应用程序的执行,也没有尝试找出应用程序运行过
程中的问题,而是将信息转储出来,并等待执行完成。
在交互式调试难以实现的情况下,这一特殊的调试方法广受人们的欢迎。例
如,实时调试
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
本例中的文本界面很清晰,但依然难以理解发生了什么事、显示了什么信息、当
前在代码特定部分中的哪处执行。