Fli*_*imm 3 debugging perl watch
使用Perl调试器,我知道我可以使用该b
命令在某些代码行设置断点.一旦变量的内容发生变化,我可以让调试器停止吗?
Fli*_*imm 14
您可以使用w
Perl调试器中的命令创建监视点.
w
调试器命令的崩溃过程:通过键入w
然后是将监视更改的表达式来创建监视表达式:
DB<1> w $variablename
Run Code Online (Sandbox Code Playgroud)
输入c
以继续,直到观察的表达式发生变化.完成后,您将获得类似于此的输出:
DB<2> c
Watchpoint 0: $variablename changed:
old value: ''
new value: 'hi'
main::(ex.pl:6): $variablename = "";
Run Code Online (Sandbox Code Playgroud)
请注意,调试器在更改发生后停止在语句处,因此显示的行可能根本不相关.
另请注意表达式是字符串化的.因此,例如,更改变量undef
将为您提供此输出:
DB<2> c
Watchpoint 0: $variablename changed:
old value: 'hi'
new value: ''
main::(ex.pl:7): $variablename = undef;
Run Code Online (Sandbox Code Playgroud)
如果随后将变量更改为空字符串,则调试器将不会停止,因为字符串化的空字符串和字符串化的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";
Run Code Online (Sandbox Code Playgroud)
您可以将数组变量或散列变量用作监视表达式,它们将被视为任何其他列表.
要删除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}
Run Code Online (Sandbox Code Playgroud)
Data::Dumper
使用Data::Dumper
观看非标量的内容:
DB<1> w Data::Dumper->Dump([$hashref])
Run Code Online (Sandbox Code Playgroud)
这比简单更好w $hashref
,因为它会在散列值改变时停止,而不是简单地指向引用指向的地址(因为hashref字符串化为类似的东西HASH(0x2a07a90)
).
归档时间: |
|
查看次数: |
2199 次 |
最近记录: |