При разработке некоторых элементов рабочего стола Windows в Delphi у меня была привычка вставлять asm(int 3);
,
Если отладчик работает, он действует как точка останова. Если отладчик не работает, он ничего не делает (NOOP
).
Я бы хотел сделать что-то подобное для моих сценариев Python. Есть ли функция Python, такая как HaltDebugger()
? Кросс-платформа, конечно.
[Обновить] Я ищу что-то, что будет работать с PyCharm
Это самое портативное решение. Более сложный из них приведен ниже для PyCharm.
Вид зависит от отладчика, но если вы используете pdb
(который будет кросс-платформой), docs заявят:
Типичное использование для взлома в отладчик из запущенной программы - вставить
import pdb; pdb.set_trace()
вы хотите, чтобы это было условным, поэтому вы можете вставлять каждую точку останова:
try: pdb.set_trace()
except NameError: pass
и когда вы хотите отлаживать только import pdb
вверху. Если это одна строка, вы не можете использовать утиную печать. Вместо:
if 'pdb' in globals(): pdb.set_trace()
Только PyCharm
Предполагая, что вы настаиваете на том, чтобы мы не отделяли линии отладки мышью, это может сработать:
Использование контрольных точек исключения:
PyCharm предоставляет контрольные точки исключения для Python, Django и JavaScript.
Исключительные точки останова запускаются, когда выбрано указанное исключение. В отличие от контрольных точек линии, для которых требуются конкретные ссылки на источники, контрольные точки исключения применяются глобально к условию исключения, а не к конкретной ссылке на код.
В зависимости от типа обработки исключение отладка может прерываться, когда процесс завершается с исключением или как только возникает исключение.
Вы могли бы:
DebugException
вставить
try: raise DebugException()
Exception: pass
где бы вы ни находились. Кажется, что много неприятностей, чтобы не дважды щелкнуть мышью, чтобы отметить точку останова.
PYDEV DEBUGGER WARNING: sys.settrace() should not be used when the debugger is being used. This may cause the debugger to stop working correctly.
и нет псевдо-точки останова :-(