调试Perl代码时是否有任何理智的方法来监视条件?
发布时间:2020-12-16 06:13:24 所属栏目:大数据 来源:网络整理
导读:我尝试使用perl -d的w命令,给它一个类似w($root =?/ something /)的条件,以便在$root更改时停止,但是即使变量超出范围,它也有停止的习惯.所以对我来说没用.我尝试添加类似w的东西(!$root || $root =?/ something /),但这似乎会导致一些奇怪的行为,例如随机
我尝试使用perl -d的w命令,给它一个类似w($root =?/ something /)的条件,以便在$root更改时停止,但是即使变量超出范围,它也有停止的习惯.所以对我来说没用.我尝试添加类似w的东西(!$root || $root =?/ something /),但这似乎会导致一些奇怪的行为,例如随机停止并进入随机潜艇.并且在任何情况下,即使后一个工作它也会停止,如果新范围包含具有相同名称的变量,所以我宁愿不必使用它.
那么,有没有其他方法可以使用Perl调试器实现仅限电流范围的手表?或者是否有任何其他控制台调试器为Perl提供此功能? 解决方法
我不相信调试器内置了任何可以执行此操作的内容,但是我自己编写了绑定的标量类并在“
ScalarSnoop :: STORE”子例程上设置了断点.
这是班级: package ScalarSnoop; use strict; use base qw(Tie::Scalar); sub TIESCALAR { my $class = shift; my $value = shift; return bless $value,$class; } sub FETCH { my $self = shift; return $$self; } sub STORE { my $self = shift; my $newvalue = shift; $$self = $newvalue; } 1; 这是一个使用它的脚本: #!/usr/bin/env perl use v5.14.0; use strict; use warnings; use lib qw(.); use ScalarSnoop; my ($first,$second,$third); tie $second,'ScalarSnoop'; $first = 'hey'; $second = 'there'; $third = 'dude'; # Changing the iterator variable changes the original since # it is an alias foreach my $variable (($first,$third)) { $variable = "like,${variable}"; say "$variable"; } 启动调试器并使用b推迟ScalarSnoop :: STORE设置断点.继续运行,当有人在您的标量中存储值时,调试器将停止.然后你可以转储堆栈跟踪并查看它是谁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |