调试 Perl CGI 脚本
Perl 是一种跨平台、开源的计算机编程语言,广泛用于商业和私营部门。 Perl 因其适应性强、不断发展的文本处理和解决问题的能力而受到 Web 开发人员的欢迎。尽管 Perl 最初是为文本编辑而开发的,但它的灵活性使其成为处理各种任务的多功能工具。
我们已经研究了一些可能会造成频繁错误的事情,但并非所有事情都是常见问题。如果您遇到麻烦并且没有一个选项适用于 CGI,您需要进行一些研究。在这一部分中,我们将介绍可以帮助您定位问题原因的各种工具。以下是您可以采取的行动的简要概述:
- 使用 -c 开关,您可以检查脚本的语法。
- 检查网络服务器上的错误日志。
- 使用命令行运行您的脚本。将变量转储到浏览器允许您测试它们的值。
- 使用交互式调试器。
验证语法
如果您的代码不解析或编译,它将永远不会正确执行。因此,在浏览器中测试脚本之前,请练习使用命令行中的 -c 标志来测试它们,并且在执行此操作时,使用 -w 标志检查警告。请记住,如果您使用污点模式(您可能对所有脚本都这样做),您还必须传递 -T 参数以避免以下错误: myScript.cgi -wc perl “-T”选项不再可用。因此,使用
perl -wcT calendar.cgi
检查错误日志
错误通常会报告给STDERR ,并且在某些 Web 服务器上,在执行 CGI 脚本时生成到STDERR的所有内容都会显示在错误日志中。当您遇到问题时,通常可以通过查看这些日志来找到许多重要信息。该文件可以在以下位置找到:
/usr/local/apache/logs/error log or /usr/var/logs/httpd/error log with Apache.
错误附加到日志的底部;在测试 CGI 脚本时,您应该密切关注它。如果使用 -f 选项执行 tail 命令
$ tail -f /usr/local/apache/logs/error_log
从命令行执行的脚本
在您的脚本通过语法检查后,您可以尝试从命令行运行它们。由于 CGI 程序严重依赖环境变量,因此您可以在运行脚本之前手动配置这些变量。
$ export HTTP_COOKIE=”user_id=abc123″
$ export QUERY_STRING=”month=jan&year=2001″
$ export REQUEST_METHOD=”GET”
$ ./calendar.cgi
Perl 调试器
如果您使用 -d 开关运行 Perl,您将最终进入交互式会话。遗憾的是,这意味着只能通过命令行使用调试器。尽管这不是 CGI 脚本的典型环境,正如我们之前展示的,复制 CGI 环境并不简单。将 CGI 对象保存到查询文件,初始化您可能需要的任何其他环境变量,例如 cookie,然后像这样运行您的 CGI 脚本是最好的方法。
$perl -dT calendar.cgi
Loading DB routines from perl5db.pl version 1
Emacs support available
Enter h or `h h’ for help.
main::(Dev:Pseudo:7): my $q = new CGI; DB<1>
起初,调试器可能看起来很吓人,但它确实很强大。
该表提供了对脚本进行故障排除以帮助您入门所需的所有基本命令的快速概述。尽管有更多工具可用,但您只需使用这些指令即可调试所有 CGI 脚本。要了解如何导航调试器,请练习逐步执行您已经知道可以正常工作的程序。因为调试器不会修改您的文件,所以您不能通过输入不正确的命令来破坏正在运行的脚本。 Step; Perl steps into any subroutines and executes the line listed above the prompt. It’s worth noting that evaluating a line with several instructions may take a few steps. Following that, Perl runs the line listed above the prompt, skipping any subroutines (they still run; Perl waits for them to finish before continuing) Continue until the program ends or the next breakpoint is reached, whichever comes first. Set a breakpoint at the current line; breakpoints stop the execution of code that has been halted by c. Place a breakpoint on line 123, which must include a command (it cannot be a comment, blank line, the second half of command, etc.). Set a breakpoint on my sub’s first executable line. Removes a breakpoint from the current line and accepts the same parameters as b. Breakpoint deleteCommand Description s n breakpoint c 123 Continue until you reach line 123, which must include a command (it cannot be a comment, blank line, the second half of a command, etc.) b b 123 b mySub d D
结论
使用 ptkdb 有两个要求。你首先需要一个 X Window 服务器; X Window 系统与大多数 Unix 和类似系统捆绑在一起,商业版本也可用于其他操作系统。其次,网络服务器必须包含 Tk.pm 模块,该模块需要 Tk 并且可以在 CPAN 上访问。 Tk 是 Tcl 编程语言附带的图形库。