В Java/С# вы можете легко пройти по коду, чтобы отследить, что может быть не так, и IDE сделает этот процесс очень удобным для пользователя.
Можете ли вы проследить через код Python аналогичным образом?
В Java/С# вы можете легко пройти по коду, чтобы отследить, что может быть не так, и IDE сделает этот процесс очень удобным для пользователя.
Можете ли вы проследить через код Python аналогичным образом?
Да! Для этого есть отладчик 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, имеют отладчик с графическим интерфейсом. Wing и PyCharm являются коммерческими продуктами, но у Wing есть бесплатная версия "Personal", а у PyCharm - бесплатная версия для сообщества.
Первый шаг - заставить интерпретатор Python войти в режим отладки.
а. Из командной строки
Самый простой путь, запущенный из командной строки, интерпретатора 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)
С. Изнутри вашей программы
Для большого проекта и долговременного модуля можно запустить отладку изнутри программы, используя 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" (далее)
Повторение последней команды отладки... с помощью ВВОД
Выход из этого всего... с помощью "q" (выйти)
Печать значения переменных... с помощью "p" (печать)
a) p a
Отключение приглашения (Pdb)... с помощью "c" (продолжение)
Увидеть, где вы... с "l" (список)
Выполнение подпрограмм... с помощью "s" (шаг в)
Продолжение... но только до конца текущей подпрограммы... с помощью "r" (возврат)
Назначьте новое значение
a) ! b = "B"
Установить точку останова
a) сломанный linenumber
b) break functionname
c) break имя_файла: linenumber
Временная точка останова
a) tiny linenumber
Условная точка останова
a) сломанный linenumber, условие
Примечание: ** Все эти команды должны выполняться из ** pdb
Для углубленных знаний обратитесь: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
В python имеется модуль под названием pdb. В верхней части вашего python script вы делаете
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 для получения дополнительной информации.
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.
Если вы исходите из фона Java/С#, я полагаю, что лучше всего использовать Eclipse с Pydev. Это дает вам полностью функциональную IDE с встроенным отладчиком. Я также использую его с django.
В настоящее время существует метод breakpoint(), который заменяет import pdb; pdb.set_trace().
Он также имеет несколько новых функций, таких как возможные переменные среды.
Если вы хотите IDE со встроенным отладчиком, попробуйте PyScripter.
Возможно также программное пошаговое и отслеживание через код python (и его легко!). Более подробную информацию смотрите в документации sys.settrace(). Также здесь - это учебник, который поможет вам начать работу.
Visual Studio с PTVS может быть для вас вариантом: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
https://wiki.python.org/moin/PythonDebuggingTools
pudb является хорошей заменой для pdb
PyCharm - это IDE для Python, включающая отладчик. Посмотрите это видео на YouTube, чтобы узнать, как использовать отладчик PyCharm для пошагового выполнения кода.
PyCharm Tutorial - отладка кода на Python с использованием PyCharm
Примечание. Это не является одобрением или обзором. PyCharm - это коммерческий продукт, за который нужно платить, но компания предоставляет бесплатную лицензию для студентов и преподавателей, а также "облегченную" версию Community, бесплатную и с открытым исходным кодом.
Python Tutor - онлайн одношаговый отладчик. Вы можете ввести код на странице редактирования и нажать "Визуализация выполнения", чтобы запустить его.
Вы можете посмотреть отладчик python, который делает именно то, что вы ищете, только не через графический интерфейс