Perl: как разбить запись в переменную в Eclipse

У меня есть скрипт, который записывает записи в хэш. Тем не менее, в определенный момент записи в хэше существуют, что я думаю, не должно. Итак, очевидно, что я где-то облажался, но есть только одно место, где я думаю, что я добавляю элементы в хеш, и я проверил это, чтобы убедиться, что эти "жульнические" элементы не добавляются в этом месте,

То, что я хотел бы сделать, это прервать запись в хеш, что-то вроде этого, но в "глобальном" смысле, потому что я не знаю, где в коде эта случайная запись - я не вижу этого…,

Так какие у меня варианты? Могу ли я установить точку наблюдения в отладчике EPIC, и если да, то как? (У меня была игра, но я не могу найти что-нибудь подходящее).

Или я мог бы создать расширенный хеш, который может как-то перехватывать записи?

Любые идеи по поводу "простого" метода отладки. В противном случае я думаю, что я вернусь к отладке грубой силы:S Спасибо в davance...

3 ответа

Решение

Не EPIC-специфичный ответ, но проверить Tie::Watch, Вы можете настроить переменную (например, хеш) для наблюдения, и ваша программа может что-то выводить каждый раз, когда переменная обновляется.

обновлено: Tie::Trace делает почти то же самое, с более простым интерфейсом.

Вот ответ от мобов в виде DIY: сделайте этот хеш привязанным к классу, который выводит трассировку стека при каждом доступе к записи:

package MyHash {
  use Tie::Hash;
  use parent -norequire, "Tie::StdHash";
  use Carp "cluck";

  sub STORE {
    my ($self, $k, $v) = @_;
    cluck "hash write to $self: $k => $v";
    $self->SUPER::STORE($k => $v);
  }
}

tie my %hash => "MyHash";
$hash{foo} = 42;
print "$hash{foo}\n";

Выход:

hash write to MyHash=HASH(0x91be87c): foo => 42 at -e line 1.
        MyHash::STORE('MyHash=HASH(0x91be87c)', 'foo', 42) called at -e line 1
42
  use Hash::Util qw(
     lock_keys unlock_keys
     lock_hash unlock_hash
  );

  my %hash = (foo => 42, bar => 23);

  # no keys change
  lock_keys(%hash);

  # no keys/values change
  lock_hash(%hash);
Другие вопросы по тегам