Как остановить скрипт Python - только если он отлаживается

1

Аналогичный вопрос

При разработке некоторых элементов рабочего стола Windows в Delphi у меня была привычка вставлять
asm(int 3); ,

Если отладчик работает, он действует как точка останова. Если отладчик не работает, он ничего не делает (NOOP).

Я бы хотел сделать что-то подобное для моих сценариев Python. Есть ли функция Python, такая как HaltDebugger()? Кросс-платформа, конечно.


[Обновить] Я ищу что-то, что будет работать с PyCharm

Теги:
debugging
breakpoints

1 ответ

2

Это самое портативное решение. Более сложный из них приведен ниже для 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.

Исключительные точки останова запускаются, когда выбрано указанное исключение. В отличие от контрольных точек линии, для которых требуются конкретные ссылки на источники, контрольные точки исключения применяются глобально к условию исключения, а не к конкретной ссылке на код.

В зависимости от типа обработки исключение отладка может прерываться, когда процесс завершается с исключением или как только возникает исключение.

Вы могли бы:

  1. Создайте собственное исключение в своем проекте, DebugException
  2. Установите контрольную точку исключения в соответствии с приведенной выше ссылкой. Убедитесь, что он настроен на запуск сразу, а не при выходе программы.
  3. В заключение,

вставить

    try: raise DebugException()
    Exception: pass

где бы вы ни находились. Кажется, что много неприятностей, чтобы не дважды щелкнуть мышью, чтобы отметить точку останова.

  • 0
    Виноват. Я забыл сказать, что я работаю с PyCharm (но upvote для хорошего ответа). Я хочу, чтобы это действовало так, будто я достиг точки останова. Когда я использую это в отладчике PyCharm, я получаю PYDEV DEBUGGER WARNING: sys.settrace() should not be used when the debugger is being used. This may cause the debugger to stop working correctly. и нет псевдо-точки останова :-(
  • 0
    Может быть, я не понимаю вопрос о PyCharm ...? В PyCharm просто щелкните между номером строки и содержимым строки, чтобы установить точку останова. Однако стиль "import pdb; pdb.set_trace ()" также должен быть совершенно корректным. В Py3.7 + вы можете использовать точку останова ().
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню