Простой способ поставить точки останова PDB в код Python?

Просто вопрос удобства. Я немного испорчен отладчиками в среде IDE, например Visual Studio и XCode. Мне немного неудобно набирать import pdb; pdb.set_trace(), чтобы установить точку останова (я бы предпочел не импортировать pdb в верхнюю часть файла, как я мог бы забыть и оставить его).

Существует ли более простой способ установки точки останова в коде Python, как простой и ненавязчивый, как то, что вы видите в среде IDE?

Ответ 1

Вы можете запустить свою программу в pdb из командной строки, запустив

python -m pdb your_script.py

Он сломается на 1-й строке, тогда вы сможете добавить точку останова, где бы вы ни захотели в своем коде, используя команду break, ее синтаксис:

b (reak) [[имя файла:] lineno | функция [, условие]]

Он достаточно гибкий, чтобы дать вам возможность добавлять точку останова в любом месте.

Ответ 2

Вы можете использовать:

from pdb import set_trace as bp

code
code
bp()
code
code

Ответ 3

В vim у меня есть макрос, настроенный для этого (в моем файле .vimrc):

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

так что я могу просто нажать \b (когда не в режиме вставки), и она добавляет точку останова после текущей строки, или \B (обратите внимание на заглавную), и она ставит единицу перед текущей строкой.

который, кажется, работает хорошо. Большинство других "простых" редакторов программистов (emacs, sublimetext и т.д.) Должны иметь аналогичные простые способы сделать это.

Редактировать: у меня на самом деле есть:

au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

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

Обновление 2019 года (Python 3. 7+)

Python 3. 7+ теперь имеет встроенную точку breakpoint() которая может заменить предыдущий import pdb; pdb.set_trace() import pdb; pdb.set_trace() в vim. Это все еще работает так же.

Ответ 4

Если вы не хотите вручную устанавливать точки останова при каждом запуске программы (в Python 3. 2+), например, скажем, что вы хотите напрямую создать точку останова в строке 3 и остановить выполнение там:

python -m pdb -c "b 3" -c c your_script.py

Следующая информация может помочь:

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

Изменено в версии 3.2:.pdbrc теперь может содержать команды, которые продолжают отладку, например, продолжить или дальше. Ранее эти команды не имели никакого эффекта.

Новое в версии 3.2: pdb.py теперь принимает опцию -c, которая выполняет команды, как если бы они были указаны в файле .pdbrc, см. Команды отладчика.

Ответ 5

Я еще не пробовал, но они просто реализовали новую встроенную функцию breakpoint() в Python 3.7, что означает, что вы можете вставить точку останова одним оператором сейчас:

breakpoint()

Ответ 6

Вот как вы бы использовали pdb в командной строке, не реализовывая ничего в своем исходном коде (документация и другие онлайн-ресурсы не очень хорошо объясняют это программисту, который в прошлом использовал только визуальные отладчики):

Запустите pdb, набрав в командной строке следующее:

python -m pdb 'python_script'

Эта команда инициализирует pdb, и отладчик pdb остановится на первой строке вашего сценария python_script и будет ждать ввода от вас:

(Pdb)

Это интерфейс для связи с отладчиком. Теперь вы можете указать свои команды здесь. В отличие от использования кнопок или сочетаний клавиш в визуальных отладчиках, здесь вы будете использовать команды для получения тех же результатов.

Вы можете перейти к следующей строке в вашем коде командой "n" (следующая):

(Pdb) n

Выполнение следующего отобразит номер строки и конкретный код в источнике:

> python_script(line number)method name
-> current line in the source code

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

(Pdb) b 50

Здесь отладчик устанавливается на разрыв в строке 50. Если других точек останова нет, точка останова в строке 50 будет первой, и на нее может ссылаться идентификатор точки останова, равный 1 в этом случае. Если вы добавите больше точек останова, они получат идентификаторы последовательно (т.е. 2, 3 и т.д.)

Как только точка останова установлена, вы продолжите выполнение программы, пока pdb не достигнет точки останова следующим образом:

(Pdb) c

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

(Pdb) p variable_name

Если вам больше не нужна точка останова, вы можете очистить ее, передав идентификатор точки останова командой clear:

(Pdb) clear 1

Наконец, когда вы закончите с отладчиком, вы можете выйти из выполнения так же, как и из интерпретатора командной строки python.

(Pdb) exit()

Я надеюсь, что это поможет любому начать работу с pdb. Вот список команд, которые вы можете использовать с отладчиком: pdb, так что вопросы и ответы

Ответ 7

Вы можете использовать среду IDE, которая поддерживает отладку python, или вы можете проверить отличный инструмент Winpdb. Что работает на любой платформе и предоставляет графические средства отладки для вашего python script.

http://winpdb.org/

Ответ 8

Python 3.7 имеет новый встроенный способ установки точек останова. призвание

breakpoint()

Подробнее здесь fooobar.com/questions/223991/...

Ответ 9

Вы можете использовать:

  • крыло ide
  • Затмение с плагином pydev
  • pycharms

Все вышеперечисленное поддерживает отладку python изнутри среды разработки.

Ответ 10

В Atom, если установлены плагины Python, вы можете просто ввести "pdb" и нажать "Enter", а фрагмент будет вводить импорт и трассировку для вас.

Я привык к этому сейчас, что иногда я просто печатаю его, даже если я редактирую его в vim и ожидаю появления выпадающего списка.

Ответ 11

Самый простой способ запустить отладчик на вашем script - это просто

pdb your_script.py

Запуск pdb в командной строке Linux дает

usage: pdb.py scriptfile [arg] ...