我最近开始研究使用mod_perl的项目。我正在尝试使用Perl调试器来调试在mod_perl下运行的一些Perl脚本。我使用以下命令启动调试器:
sudo OPTIONS="-X -DPERLDB" /etc/init.d/httpd restart
perl.conf的相关调试部分(由httpd.conf包含)是:
<IfDefine PERLDB>
<Perl>
use Apache::DB ();
Apache::DB->init;
</Perl>
<Location />
PerlFixupHandler Apache::DB
</Location>
</IfDefine>
这会带我进入调试器。当我在浏览器中加载所需的页面时,调试器会破坏由mod_perl包装的Perl脚本的第一行(应用程序正在使用PerlRun,btw)。我现在可以单步执行代码,打印变量等等。
我的问题是查看源代码(l
,-
和v
)的命令在Perl脚本中不显示任何内容。它们在模块内按预期工作 - 也就是说,如果代码进入Perl脚本使用的模块,则视图源命令可以正常工作。
这是mod_perl中调试的已知问题吗?我能做些什么来解决它吗?
我在CentOS 5.6 x86_64上使用Apache 2.2.3和Perl 5.8.8。
答案 0 :(得分:1)
我以前遇到过这个问题,并对这个问题进行了有根据的猜测。我目前的工作原理是调试器没有显示perl解析的代码,因为perl在编译阶段已经抛弃了它。相反,调试器查看相对路径以从实际文件中获取源代码。但是,调试器从Apache服务器根开始查找,这可能与启动Apache的位置不同。当它找不到文件时,它会显示为一堆空行。