我正在使用我创建的 Web 表单作为查询 MySQL 数据库的接口。我编写了一些 perl CGI 脚本来处理查询。但是我没有得到想要的输出,所以我需要调试脚本。我怎么做?我主要使用 Eclipse 来调试 perl,但现在我将 Web 表单参数(复选框、列表框)作为脚本的输入。有什么方法可以从网页传入输入,然后在 Eclipse 中调试脚本?或者在这种情况下还有其他调试方法吗?希望我已经说清楚了。谢谢。
6 回答
我使用这个 Perl 模块进行 CGI 调试。它允许您在从普通浏览器运行时捕获发送到 CGI 脚本的所有数据。然后,它允许您使用捕获的数据从任何地方(命令行、调试器内)“重播”脚本。
CGI::Inspect看起来很有希望,尽管我自己还没有尝试过。
在正常的 CGI 会话期间使用Devel::DumpTrace(通过 DUMPTRACE_FH 将数据记录到文件中)是一种进行深入调试的方法,而无需使用实际的调试器。
是的,当然你可以使用 Apache 的错误日志来做调试;这是一种非常懒惰但高效的工作方式。
您提到您使用 Eclipse,所以我假设您也使用 EPIC 插件进行 Perl 开发。查看本章,了解如何配置 Eclipse/EPIC 以调试 CGI:
目前尚不清楚您究竟要调试什么,但有一些提示:
- 在 Apache 下运行时,警告会转到
error.log
,因此您可以在那里跟踪您的变量。 - CGI.pm 模块允许您从命令行(带参数)运行 CGI 脚本。
我希望 Eclipse 有一种模拟 CGI 的方法。
我使用 ActiveState 的 Komodo IDE,它可以模拟 CGI(包括输入参数),所以我可以推荐它作为用于此目的的好工具。不过,IDE 不是免费的,但如果您要经常这样做,请考虑这是一项投资。(我不隶属于 ActiveState - 只是一个快乐的客户。)
如果你有一个假设的用 perl 编写的 CGI 程序,名为 webawesome.pl,并且你想向它传递两个参数:名称和年龄,你可以使用这样的 shell 命令:
prompt> perl -d webawesome.pl name=sifl age=21
现在您在 perl 调试器中,您可以单步执行程序,命令行中的键/值对将作为表单参数由 CGI.pm 加载
在 Eclipse 中设置这些命令行开关作为练习留给读者,因为我是一个毫不掩饰的 vi 用户,并且两三年没有使用 eclipse。我知道有设置运行/调试选项的对话框。
您可以使用 Firebug 或 Fiddler 来查看您从表单发出的请求,以确保您发送的正是您认为的内容。您还可以打开一个文件open(fh,">>debug.txt")
并打印出您对日志文件进行的 sql 调用。我还建议学习 Data::Dumper 它将漂亮地打印出对象,以便您可以看到它们的结构。