加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl调试器中查看表达式的更改?

发布时间:2020-12-16 06:09:39 所属栏目:大数据 来源:网络整理
导读:使用Perl调试器,我知道我可以使用b命令在某些代码行设置断点.一旦变量的内容发生变化,我可以让调试器停止吗? 解决方法 您可以使用Perl调试器中的w命令创建监视点. 关于w debugger命令的崩溃过程: 通过键入w然后创建一个将监视更改的表达式来创建一个watch-
使用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)).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读