关于debug,Perl命令行调试器了解一下
Posted 锐翌基因
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于debug,Perl命令行调试器了解一下相关的知识,希望对你有一定的参考价值。
相信每个程序猿都有过编程5分钟,查问题N小时的经历,也许你觉得通过打印日志可以查到问题,但是这样一方面日志会对代码有侵入,一方面当日志量较大,比如需要跟进循环内部时,很难排查出有问题的是哪条。今天就和大家一起讨论下Perl语言里该怎么debug来快速定位问题。
1. What’s debug:
大家都知道bug在程序编程中是“错误”的意思,那么debug就是通过调试,发现并减少程序错误的一个过程。
2. The way to Debug
每种语言debug的方式细节可能不太相同,但大体思路一致。有些语言需要依靠相应的IDE环境去debug,有些语言会自带debug命令,比如Perl。Perl语言有自带的调试器,功能也很全面。因为我们一般使用Perl开发程序时多是通过命令行界面登录服务器,所以,今天这里主要介绍一下缺省命令行调试器方法。
3. How to debug
那就看示例代码吧:文件名是test.pl,主功能很简单,申明了一个数组,并定义了一个子函数,在子函数中我们对数组进行了修改。
接下来,我们通过Perl自带的调试工具看下如何一步步观察变量的变化。
首先,在命令行中输入perl -d test.pl。
-d即Perl语言的debug指令,这样我们就进入了debug模式,控制台从上到下依次会输出当前Perl版本;提示输入h可以查看指定帮助;当前代码光标所在的行数、代码;以及提示输入指令。
图中输入h后可以看到各指定功能的简介。或者输入h+空格+指令,查看具体指令参数。
然后,通常情况下因为添加断点需要指定行数,所以我们需要先查看下代码整体,使用l指令:
可以看到第3行的”==>”表示当前代码执行到的位置,我们可以通过s指令,让代码一行一行的执行下去。从第3行起始位置开始执行一次s指令,会让代码执行到第4行,再执行一次s指令,按照程序执行的顺序,执行到第7行的子函数内部。
继续s执行到第8行,我们可以使用”p变量”或者”x 变量”查看执行到这一步,各变量的值。
最后,当程序全部执行完后,控制台会提示debug结束,我们可以使用q退出或者R重新debug。
截止到目前我们是一步步的在调试代码,如果我们大概知道出问题的地方,比如这里是循环出现了问题,我们可以直接在循环内部打断点:使用b命令可以在指定行上增加断点,断点的意思是:当程序执行到断点时会停止掉,等待下一步命令。这里我们在第9行上添加断点后,使用c命令(代表执行,没有断点会直接执行到程序结束),可以看到程序直接在第一次循环的地方停止了。
此外如果我们想要监视一个全局变量值的变化,可以使用w命令,它会在指定变量变化时停止运行,并将此次变化前后的值打印出来,当然,如果需要的话,可以同时监视多个变量的变化。w命令是根据设置的变量名去跟踪变化的,也就是说我们在主函数里定义了一个变量a,子函数里也有个变量a,当这两个变量任意一个的值发生变化时,都会被命中,终止运行。
最后,同学们看黑板,划重点啦。
我们总结下经常会用到的一些命令:
1. h 帮助;
2. n 下一步next,会跳过sub子函数;
3. s 单步调试,可以进入sub子函数;r跳出子函数调试;
4. p 打印表达式的结果,也可以显示变量的值,比如p $a;
5. w 监视表达式;
6. x 显示变量结果;比p支持的数据类型更多;
7. a 行号 命令:给程序的某一行加一个附加操作。在执行该行语句前先执行附加的操作。 A:删除所有已安装的附加操作;
8. c 行号:continue到指定行;
9. b 行号;断点设置。B 行号;断点去除。L;查看断点;
10. q 退出。
供稿:宋瑞雪
编辑:王霞
以上是关于关于debug,Perl命令行调试器了解一下的主要内容,如果未能解决你的问题,请参考以下文章