如何在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)). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |