В версиях Python до утилиты PEP 553 breakpoint()
, каков рекомендуемый способ добавления (в идеале однострочного) кода, чтобы иметь точку останова, которую можно игнорировать при условии (например, глобальный флаг отладки или args.debugflag).
В Perl я привык использовать $DB::single=1;1;
однострочные, которые, я знаю, я могу безопасно оставить в коде и не повлияет на нормальный запуск perl code.pl
, если явно не вызывается perl -d code.pl
.Например:
my $a = 1;
$DB::single=1;1; # breakpoint line
my $b = 2;
print "$a $b\n";
Если я выполню этот код как: perl code.pl
, он запустится до завершения.Если я выполню этот код с: perl -d code.pl
, pdb
остановится на строке точки останова (не перед следующей строкой с оператором my $b = 2;
), поскольку он содержит оператор 1;
после оператора $DB::single=1;
;
Точно так же, если я напишу:
my $debug = 1;
my $a = 1;
$DB::single=$debug;1; # first breakpoint line
my $b = 2;
$DB::single=$debug;1; # second breakpoint line
print "$a $b\n";
# [...] Lots more code sprinkled with more of these
$DB::single=$debug;1; # n'th breakpoint line
, я могу затем выполнить perl -d code.pl
, который остановится в первой строке точки останова, затем в сеансе pdb
, как только я буду рад, чтоего не нужно останавливать где-либо еще, затем выполните: $debug = 0
, затем pdb
continue c
, что не позволит ему остановиться на второй или других аналогичных линиях точки останова в коде.
Как можноЯ достигаю того же, в идеале в однострочных выражениях, в python (2.x и 3.x до PEP 553)?
Я знаю о PEP 553, и кроме того, что приходится явно устанавливать PYTHONBREAKPOINT=0 python3.7 code.py
или закомментируйте breakpoint()
строки, это решение вопроса здесь.
Я думал о таких вариантах, как:
import pdb; pdb.set_trace()
dummy=None;
Утверждение под pdb.set_trace()
таково, чтоЯ могу достичь того же, что и 1;
в той же строке после $DB::single=1;
в Perl, который должен иметь остановку отладчика, где я разместил точку останова, а не следующий оператор.Это делается для того, чтобы при наличии больших кусков прокомментированного кода или документации между ними отладчик не переходил к следующему оператору вдали от точки останова.
Или с такими условиями, как:
if args.debug or debug:
import pdb; pdb.set_trace()
_debug=False; #args.debug=False
Так что, если я закончу отладку для скрипта, я могу установить args.debug=False
или debug=False
и не должен трогать все эти точки останова вкод.