调试Perl代码时是否有任何理智的方法来监视条件?

前端之家收集整理的这篇文章主要介绍了调试Perl代码时是否有任何理智的方法来监视条件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_3@
我尝试使用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设置断点.继续运行,当有人在您的标量中存储值时,调试器将停止.然后你可以转储堆栈跟踪并查看它是谁.

@H_502_3@

猜你在找的Perl相关文章