gpt4 book ai didi

perl - 如何在 Perl 调试器中观察表达式的变化?

转载 作者:行者123 更新时间:2023-12-05 00:44:55 24 4
gpt4 key购买 nike

使用 Perl 调试器,我知道我可以使用 b 在某些代码行设置断点命令。一旦变量的内容发生变化,我可以让调试器停止吗?

最佳答案

您可以使用 w 创建观察点Perl 调试器中的命令。

速成类(class) w调试器命令:

通过键入 w 创建监视表达式然后是一个将监控变化的表达式:

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";

您可以使用数组变量或哈希变量作为监视表达式,它们将被视为任何其他列表。

要删除监视表达式,请使用 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) 的东西)。

关于perl - 如何在 Perl 调试器中观察表达式的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com