Ответы:
Да! Для этого есть отладчик Python pdb
!
Вы можете запустить программу на Python pdb
с помощью pdb myscript.py
или python -m pdb myscript.py
.
Затем вы можете выполнить несколько команд, которые описаны на pdb
странице.
Некоторые полезные для запоминания:
b
: установить точку остановаc
: продолжайте отладку, пока не достигнете точки остановаs
: пройти через кодn
: перейти к следующей строке кодаl
: список исходного кода для текущего файла (по умолчанию: 11 строк, включая выполняемую строку)u
: перемещаться вверх по стекуd
: перейти вниз по стекуp
: напечатать значение выражения в текущем контекстеЕсли вы не хотите использовать отладчик командной строки, некоторые IDE, такие как Pydev , Wing IDE или PyCharm, имеют отладчик GUI. Wing и PyCharm являются коммерческими продуктами, но у Wing есть бесплатная версия «Personal», а у PyCharm - бесплатная версия для сообщества.
pudb
отлично подходит для этого. Такжеpydev
pdb
не инструмент командной строки. Чтобы использовать это, используйте python -m pdb your_script.py
.
pdb
команда входит в python
пакет. В любом случае, python -m <module>
становится стандартом для других вещей, таких как pip
, так что, вероятно, лучше использовать это по умолчанию.
Первый шаг - заставить интерпретатор Python войти в режим отладки.
A. из командной строки
Самый простой способ запуска из командной строки интерпретатора Python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
Б. Внутри переводчика
Разрабатывая ранние версии модулей и экспериментируйте более итеративно.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. Из вашей программы
Для большого проекта и долго работающего модуля, можете начать отладку изнутри программы, используя import pdb и set_trace () следующим образом:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
Пошаговая отладка для более внутреннего
Выполните следующий оператор ... с помощью «n» (следующий)
Повторение последней команды отладки ... с помощью ENTER
Бросить все это ... с «q» (выход)
Печать значения переменных… с помощью «p» (печать)
а) в год
Отключение подсказки (Pdb)… с помощью «c» (продолжение)
Видя, где вы находитесь ... с «л» (список)
Вступая в подпрограммы ... с "S" (шаг в)
Продолжая ... но только до конца текущей подпрограммы ... с "r" (возврат)
Назначьте новое значение
а) ! b = "B"
Установить точку останова
а) сломать белье
б) нарушить имя функции
в) прервать имя файла: белье
Временная точка останова
а) триммер белья
Условная точка останова
а) перерыв белья номер, состояние
Примечание: ** Все эти команды должны выполняться из ** pdb
Для углубленного знания, обратитесь: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
В python есть модуль pdb. В верхней части вашего скрипта Python вы делаете
import pdb
pdb.set_trace()
и вы войдете в режим отладки. Вы можете использовать 's' для перехода, 'n' для перехода к следующей строке, аналогично тому, что вы сделали бы с отладчиком 'gdb'.
Начиная с Python 3.7, вы можете использовать breakpoint()
встроенную функцию для входа в отладчик:
foo()
breakpoint() # drop into the debugger at this point
bar()
По умолчанию breakpoint()
будет импортировать pdb
и звонить pdb.set_trace()
. Однако вы можете управлять поведением отладки с помощью sys.breakpointhook()
переменной окружения PYTHONBREAKPOINT
.
См. PEP 553 для получения дополнительной информации.
breakpoint
я был взволнован. Но потом я узнал, что это по сути всего лишь ярлык, import pdb; pdb.set_trace()
и это меня расстроило. Разработчики Python: пожалуйста, обратите внимание на улучшение PDB с помощью базовых функций GDB, таких как строки контекста, постоянная история команд и автозаполнение вкладок :-)
ipdb добавляет функциональность IPython в pdb, предлагая следующие ОГРОМНЫЕ улучшения:
Как и в случае с pdg, ipdb по-прежнему далек от совершенства и является полностью элементарным по сравнению с GDB, но это уже огромное улучшение по сравнению с pdb.
Использование аналогично pdb
, просто установите его с помощью:
python3 -m pip install --user ipdb
а затем добавьте в строку, из которой вы хотите выполнить отладку:
__import__('ipdb').set_trace(context=21)
Вы, вероятно, хотите добавить ярлык для этого из вашего редактора, например, для Vim snipmate, который у меня есть:
snippet ipd
__import__('ipdb').set_trace(context=21)
так что я могу печатать просто, ipd<tab>
и он расширяется до точки останова. Тогда удалить его легко, dd
поскольку все содержится в одной строке.
context=21
увеличивает количество строк контекста, как описано в разделе : Как я могу заставить ipdb показывать больше строк контекста при отладке?
Кроме того, вы также можете отлаживать программы с самого начала с помощью:
ipdb3 main.py
но вы, как правило, не хотите этого делать, потому что:
Или же, как в raw pdb 3.2+, вы можете установить некоторые точки останова из командной строки:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
хотя -c c
по какой-то причине не работает: https://github.com/gotcha/ipdb/issues/156
python -m module
Отладка была задана по адресу: Как отладить модуль Python, запущенный с python -m из командной строки? и так как Python 3.7 можно сделать с:
python -m pdb -m my_module
Серьезные недостающие возможности как pdb, так и ipdb по сравнению с GDB:
Особые неприятности ipdb:
Протестировано в Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
В breakpoint()
настоящее время существует метод, который заменяет import pdb; pdb.set_trace()
.
Он также имеет несколько новых функций , таких как возможные переменные среды.
Если вам нужна IDE со встроенным отладчиком, попробуйте PyScripter .
https://wiki.python.org/moin/PythonDebuggingTools
pudb - хорошая замена для pdb
Python Tutor - это онлайн одношаговый отладчик, предназначенный для новичков. Вы можете вставить код на редактирование странице нажать «Визуализация выполнения», чтобы запустить его.
Помимо прочего, он поддерживает:
Однако он также не поддерживает много вещей , например:
io.StringIO
и io.BytesIO
вместо этого: demoПрограммный переход и отслеживание кода Python также возможны (и это легко!). Посмотрите документацию sys.settrace () для более подробной информации. Также вот учебник, чтобы вы начали.
Visual Studio с PTVS может быть вариантом для вас: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm - это IDE для Python, включающая отладчик. Посмотрите это видео на YouTube, чтобы узнать, как использовать отладчик PyCharm для пошагового выполнения кода.
PyCharm Tutorial - отладка кода Python с использованием PyCharm
Примечание: это не предназначено для одобрения или обзора. PyCharm - это коммерческий продукт, за который нужно платить, но компания предоставляет бесплатную лицензию для студентов и преподавателей, а также «облегченную» версию Community, бесплатную и с открытым исходным кодом.