设为首页 收藏本站
查看: 714|回复: 0

[经验分享] [Perl]交互调试mod_perl

[复制链接]

尚未签到

发表于 2017-5-16 12:11:58 | 显示全部楼层 |阅读模式
版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/09/01/interactive-debug-mod_perl/以及本声明。


应该很多人都在为mod_perl的调试方法发愁吧。通常只能使用print,或者输出到syslog中,但都需要猜测错误位置并添加相应的日志输出,然后重启服务器,刷新,看结果…… 虽然使用Apache::Reload能减少重启服务器的麻烦,但Apache::Reload用多了就会出错,而必须重启,何况打日志总不像交互式调试器方便。

mod_perl的官方文档中写明了如何使用调试器来调试,不过这个方法在RHEL4下似乎不太好用(自己编译mod_perl的同学就应该没这个问题)。查看了一下,原来RHEL4自带的mod_perl是 mod_perl-1.99_16-4,而在官方的mod_perl的下载页面上最高版本只有 1 系的 1.30 和2系的2.0.4,并没有所谓的1.99版。看这个mod_perl-1.99的内容,应该是1系和2系的混合体吧。 Apache::DB这个包与mod_perl-1.99不兼容,于是就无法正常调试了。

不过办法总是有的——自己改!方法如下。

1. 安装Apache::DB。去CPAN搜索Apache::DB安装即可。这里的例子使用的是Apache-DB-0.13。安装方法不用多说,直接 perl Makefile.PL && make && make install。

2. 修改Apache::DB:打开/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/Apache/DB.pm,注释掉72-74行:

69 else {
70 if (ref $r) {
71 $SIG{INT} = /&DB::catch;
72 # $r->register_cleanup(sub {
73 # $SIG{INT} = /&DB::ApacheSIGINT();
74 # });
75 }
76 }3. 然后修改httpd.conf,加载调试模块:

<IfDefine PERLDB>
<Perl>
use Apache::DB ();
Apache::DB->init;
</Perl>
<Location />
PerlFixupHandler Apache::DB
</Location>
</IfDefine>
<IfDefine !PERLDB>
PerlInitHandler Apache::Reload
</IfDefine>这里定义了一个环境变量PERLDB,这个变量存在时即启动Apache::DB供交互调试使用,不存在则加载Apache::Reload用于通常的开发。

4. 停止Apache

# /etc/init.d/httpd stop5. 以调试方式启动Apache

# httpd -X -D PERLDB
[notice] Apache::DB initialized in child 111356. 从浏览器访问要调试的页面。这时即可进入调试器。

Loading DB routines from perl5db.pl version 1.27
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

DB<1> 然后就可以使用尽情地调试了。

一般的调试方法都是,先 use 你要调试的模块,然后设置断点,执行,再单步。写成命令就是:

DB<1> use Your::Module; # 先use一下避免添加断点时找不到函数(不是必须的)
DB<2> b Your::Module::foo; # 在foo函数开始处设置断点
DB<3> c # 执行到断点
DB<4> n # 单步执行(要step in就用s)
DB<5> x $bar; # 查看变量的详细内容最后,想结束调试时,再开个终端然后 killall httpd 就行了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378168-1-1.html 上篇帖子: 神奇的perl-最佳PERL入门教程 下篇帖子: perl(1)-perl中的数字
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表