Можно ли игнорировать жестко заданную точку останова pdb?

Я использую pdb отладить скрипт Python 2.7, который включает в себя жестко запрограммированные точки останова, используя pdb.set_trace() функция. Когда я хочу запустить скрипт, не останавливаясь на точках останова, я должен закомментировать все pdg.set_trace() линий, а затем, когда я хочу остановиться на контрольных точках, я должен удалить комментарии, что очень неэффективно. Есть ли способ (например, флаг командной строки) выполнить скрипт Python, игнорируя все жестко закодированные точки останова. Например, многие IDE, такие как PyCharm, имеют режим запуска, в котором игнорируются точки останова, и режим отладки, который останавливается в точках останова. Могу ли я сделать что-то подобное из командной строки?

4 ответа

Решение

Нет, это не фича в pdb. Однако вы можете написать обработку параметров командной строки в своей программе и установить глобальную переменную, такую ​​как DEBUG_MODE = True тогда вы просто измените все свои pdb.set_trace() призывает быть:

if DEBUG_MODE:
    pdb.set_trace()

Вы можете установить глобальную переменную среды PYTHONBREAKPOINT для включения или выключения pdb.

Установка его на 0 отключит pdb, а установка пустого значения снова включит его.

Примеры:

Отключить точку останова:

      export PYTHONBREAKPOINT=0

Включить точку останова:

      export PYTHONBREAKPOINT=

Вы можете сделать это в коде, если обнаружите, что не хотите выходить из текущего сеанса.

      import os
os.environ["PYTHONBREAKPOINT"] = "0"

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

После входа в сеанс отладки изменение переменной средыPYTHONBREAKPOINTне отключит жестко запрограммированноеset_trace()позвони еще.

Одно из решений, которое я нашел, уже находясь в процессе Python, — это обезьянье исправление функции set_trace:

В командной строке pdb:

      !pdb.set_trace = lambda: None

Затем нажмитеcпродолжать.

Другие вопросы по тегам