С perldebug
:
Если вы установите $DB::single
на 2
, это эквивалентно тому, что вы просто набрали команду n
(которая выполняется по вызовам подпрограммы),тогда как значение 1
означает команду s
(которая входит в вызовы подпрограмм).
Это вы уже много знаете.
С точки зрения пользователя, я 'Я уверен, что нет никакой разницы.Я основываю это на рассмотрении фактического DB.pm
исходного кода .
Давайте рассмотрим это логически.Вы можете обратиться к исходному коду.Я упростил часть кода, чтобы удалить ненужные детали, но вы сможете понять идею из моих описаний.
Когда вы выполняете код в отладчике, есть (как минимум) две важные переменные,running
и single
.Их комбинация определяет, будет ли выполняться код:
running single description
------- ------ -----------
0 ? not running
1 0 running flat-out
1 1 single stepping, execute into function
1 2 single stepping, execute over function
Функция DB()
выполняется для каждой отдельной строки и содержит следующий фрагмент, который остановит выполнение, если single
былset (она всегда выполняет текущую строку независимо от этого):
if ($DB::single) {
$DB::single = 0;
$running = 0;
}
Вот почему, если вы установите переменную в вашем Perl-коде, она сломается (по прерыванию, я имею в виду «прекратить выполнение кода», а не«как-то повредить») отладчик на следующей строке.
Когда running
равен 0
, функция DB()
входит в этот маленький цикл:
# Now sit in an event loop until something sets $running
do {
$c->idle; # call client event loop; must not block
} until $running;
Другими словами,он ожидает команды пользователя, которая устанавливает running
обратно в 1
.Это можно сделать с помощью одной из следующих трех функций:
sub next {
$DB::single = 2;
$running = 1;
}
sub step {
$DB::single = 1;
$running = 1;
}
sub cont {
$DB::single = 0;
$running = 1;
}
Вы можете видеть, что эти три команды устанавливают различную комбинацию single
и running
, которая будет использоваться при выполнении следующего Perl(см. предыдущую таблицу, чтобы узнать, что означают эти комбинации).
Возможность использовать 1
или 2
в вашем Perl-коде является прямым результатом того факта, что вы используете хитрый, но умный трюк , чтобы отделить выполнение от самого кода Perl, установив переменную, которая обычно устанавливается командой отладчика.
Вот почему значение не так важно, какфакт, что вы переводите отладчик в определенное состояние.