Простой способ поставить точки останова 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] ...