如何在Perl调试器中查看表达式的更改?
|
使用Perl调试器,我知道我可以使用b命令在某些代码行设置断点.一旦变量的内容发生变化,我可以让调试器停止吗?
解决方法
您可以使用Perl调试器中的w命令创建监视点.
关于w debugger命令的崩溃过程: 通过键入w然后创建一个将监视更改的表达式来创建一个watch-expression: DB<1> w $variablename 输入c继续,直到观察到的表达式发生变化.完成后,您将获得类似于此的输出: DB<2> c
Watchpoint 0: $variablename changed:
old value: ''
new value: 'hi'
main::(ex.pl:6): $variablename = "";
请注意,调试器在更改发生后停止在语句处,因此显示的行可能根本不相关. 另请注意表达式是字符串化的.因此,例如,将变量更改为undef将为您提供此输出: DB<2> c
Watchpoint 0: $variablename changed:
old value: 'hi'
new value: ''
main::(ex.pl:7): $variablename = undef;
如果随后将变量更改为空字符串,则调试器将不会停止,因为字符串化的空字符串和字符串化的undef被视为相等. 如果监视表达式是列表,则调试器将比较列表的字符串化元素: 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";
您可以将数组变量或散列变量用作监视表达式,它们将被视为任何其他列表. 要删除watch-expression,请使用W命令,要查看活动监视表达式列表,请使用L命令. 提示:使用临时全局变量 由于watch-expression是使用每个语句重新计算的,因此您不能指望使用词法变量的watch-expression超出范围.一个快速提示是创建一个词法的全局引用,并跟踪它: DB<1> $main::my_debug_variable = $hashref_lexical_variable
DB<2> w $main::my_debug_variable->{key_im_watching}
提示:使用Data :: Dumper 使用Data :: Dumper观察非标量的内容: DB<1> w Data::Dumper->Dump([$hashref]) 这比简单的w $hashref更好,因为它会在散列值改变时停止,而不是简单地引用指向的地址(因为hashref字符串化为类似HASH(0x2a07a90)). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
