其实相比于我们写程序,调试程序所花的时间远远比写程序花的时间长得多!现在我觉得是时候对perl调试进行总结了。
总的概括的来说:有三大调试的方法
- 直接在原文中进行
print $var
来进行调试,查看各个变量是否符合预期的结果。 - 利用perl 自带的调试器进行调试.
- 在windos中有一个可视化的调试模块
Tk
下面我介绍一下如何用perl自带的调试器进行调试:
如何启动调试
$ perl -d file
这里可以利用这个功能进入perl的交互界面:
$ perl -de 1 # 进入像python 和 R一样的交互界面
重要的调试的命令
命令 | 功能 |
---|---|
h | 帮助 |
n | 下一步,不可进入子程序 |
s | 单步,可进入子程序 |
r | s进入子程序之后,按r可退出 |
p | 等同于print |
x | 输出你要查看的变量的值 |
V | 查看一个Package中的所有变量 |
l | 列出将要执行的代码, |
l x+y | 从x 行开始列出y+1行源代码 |
lx-y | 列出从x到y行的源代码 |
– | 列出当前代码前的源代码 |
c x | 告诉调试器运行到第x行后停下来 |
b x or subroutine | 在指定行或者子程序处设置断点 |
d | 删除断点 |
D | 删除所有断点 |
L | 列出所有断点 |
w | 设置观察点 |
使用技巧:
- 如果你忘了上面这些命令的含义,你可以用h来查看
- 查看代码的运行情况用
s,n,r
,检查变量用p,x,V
,检查源程序用l,-,w
,使用断点用c,b,L
,观察变量的情况用w
- 用 x 来检查hash 时用
x \ %hash
, 这样得到的结果比之间检查更加友好 - 在有些情况下,你可能不希望在某些断点上中断,在而只在一些条件为真的情况下中断。你可以在b 后面加第三个参数,例如:
b 16/Hey/
这个意思就是说当16行运行到 其中有一个字符串是Hey时,停止下来。