如何在Perl调试器中监视表达式的更改?
使用Perl调试器,我知道我可以使用如何在Perl调试器中监视表达式的更改?,perl,debugging,watch,Perl,Debugging,Watch,使用Perl调试器,我知道我可以使用b命令在某些代码行设置断点。变量的内容发生更改后,是否可以让调试器立即停止?您可以使用Perl调试器中的w命令创建观察点 关于w调试器命令的速成课程: 通过键入w创建一个监视表达式,然后键入一个将监视更改的表达式: DB<1> w $variablename 请注意,在发生更改后,调试器会在语句处停止,因此显示的行可能根本不相关 还要注意,表达式是字符串化的。例如,将一个变量更改为unde将得到以下输出: DB<2> c Watc
b
命令在某些代码行设置断点。变量的内容发生更改后,是否可以让调试器立即停止?您可以使用Perl调试器中的w
命令创建观察点
关于w
调试器命令的速成课程:
通过键入w
创建一个监视表达式,然后键入一个将监视更改的表达式:
DB<1> w $variablename
请注意,在发生更改后,调试器会在语句处停止,因此显示的行可能根本不相关
还要注意,表达式是字符串化的。例如,将一个变量更改为unde
将得到以下输出:
DB<2> c
Watchpoint 0: $variablename changed:
old value: 'hi'
new value: ''
main::(ex.pl:7): $variablename = undef;
提示:使用Data::Dumper
使用Data::Dumper
查看非标量的内容:
DB<1> w Data::Dumper->Dump([$hashref])
DB w Data::Dumper->Dump([$hashref])
这比简单的
w$hashref
更可取,因为当哈希值更改时,它将停止,而不仅仅是引用所指向的地址(因为hashref字符串化为类似hash(0x2a07a90)
)。此外,您可以在Linux中使用“ddd your_script.pl&”
,并观察像C/C++调试器这样的变量在GUI中的表现。最后两个技巧非常棒!另一个提示:w$$
在进入forked childrenIn(第四版,第三版,2013-12-13)时中断,“w”被称为列出源代码,与1991年第一版相同(现在似乎是“v”(Perl版本5.30))。那是在这个答案被写出来之前的一个月。什么时候从“w”变为“v”?1994年的Perl5?好的,我找到了。根据文件,“w”被重新分配到(2002-03-05)中的观察表达式。在(2001-07-13)中,“w”仍然用于源代码列表。这本书已经严重过时了。对于Perl调试器(在发布时(2012年2月),该版本(第四版)已经过期了近10年)。谢谢@PeterMortensen。请随意编辑我的答案以更新它。
DB<1> w $variablename, "second"
DB<2> c
Watchpoint 0: $variablename, "second" changed:
old value: 'one', 'second'
new value: 'two', 'second'
main::(hi.pl:6): $variablename = "three";
DB<1> $main::my_debug_variable = $hashref_lexical_variable
DB<2> w $main::my_debug_variable->{key_im_watching}
DB<1> w Data::Dumper->Dump([$hashref])