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

[经验分享] Perl篇:常用调试命令

[复制链接]

尚未签到

发表于 2015-12-25 15:03:17 | 显示全部楼层 |阅读模式
  本文所用到的Perl调试器为Perl解释器本身,可以通过-d开关打开调试功能。本文不会将涵盖所有的调试命令,只会解释一些我们常用的调试命令,希望对热爱Perl的朋友有所帮助。
  打开调试开关
  Perl是解释型语言,运行一个Perl脚本,可以通过在命令行中敲入形如 Perl Test.pl 的命令直接解释执行。如果想调试我们的脚本程序,可以加上-d选项,命令为perl -d Test.pl,回车后程序会停在DB<1>处,如下图所示:      


DSC0000.jpg            
  从上图看出程序执行到主(main)程序的第二行(Test.pl 2)      
  
  插入/查看/删除断点      
  插入断点可以使用b命令,命令格式为:b 行号/函数名 条件,在上图中DB<1>处即可设置断点,如下图所示:     
DSC0001.jpg
  在子过程SetInitValue处设置了断点      
  
  查看设置的断点使用L命令,注意是大写,小写是显示尚未执行到的代码的部分内容,如下图所示:      
DSC0002.jpg
          断点设置在21行处      
  
  删除设置的断点请使用B命令,该命令格式为:B 行号| *,可以指定行号来删除断点或者使用通配符*来删除所有的断点,如下图所示:
DSC0003.jpg
  删除21行处的断点         
  
  增加/查看/删除监视  
  添加监视对于调试程序非常重要,本示例脚本中定义了一个名叫$val的变量,初始值为1,在SetInitValue函数中修改值为12。通过对其添加监视,来理解Perl中怎么增减删除监视的
  添加一个$val==1表达式的监视,命令为w $val==1,如下图所示:     
DSC0004.jpg
  添加对表达式的一个监视    
  
  查看当前表达式的值可以使用p命令,格式为p expr,查看$val==1的当前表达式值命令为:p $val==1,如下图所示:     
DSC0005.jpg    
  当前表达式值为1,即true
  
  删除监视可使用W(大写字母)命令,格式为:W expr|*,可以删除指定的表达式或者使用通配符*删除所有的监视值,如下图所示:
DSC0006.jpg
    删除对表达式$val==1的监视               
  
  步入执行(Step Into)         
  步入执行即单步调试中,碰到子过程会进入子过程中执行,命令为s,如下图所示:
DSC0007.jpg
  步入执行,进入到SetInitValue子过程中   
  
  步出执行(Step Out)
  步出执行及单步调试中,遇到调用其他子过程的时候,不会进入子过程中,而是直接执行该子过程的其余行,然后将控制权返回给子过程调用者。示例程序在SetInitValue子过程中调用了AddRet子过程,通过下图可以看出其中的区别:
DSC0008.jpg    
  示例程序部分代码              
  
            DSC0009.jpg    
   调试程序到SetInitValue子过程调用AddRet子过程处                 
  
DSC00010.jpg
   使用s命令会步入到AddRet子过程中
  
DSC00011.jpg         
  使用n命令直接执行完AddRet后返回
  
  跳出执行(Return from subroutine)
  这个命令其实比较有用,在简单的程序中或许感觉不出来。但是当你调试一个大型的perl程序的时候,你会发现你所调试的程序往往引用了很多的其他自定义的或者第三方模块,并且调试的程序可能会频繁的进入这些模块代码中,为了节省时间与方便,我们更多会选择跳出命令选项直接从这个模块或者当期陷入的子过程中跳出。
  其命令为r,我们在上述例子中s命令跳入AddRet子过程的基础上,使用r命令返回,如下图所示:  
DSC00012.jpg
  使用r命令从AddRet子过程直接跳出                       
  
  退出调试
  退出调试使用命令q,如下图所示:      
DSC00013.jpg   
  

运维网声明 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-156273-1-1.html 上篇帖子: Perl 字符串处理备忘录 下篇帖子: perl:修改原文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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