Відповіді:
Так! Там називається налагоджувач Pythonpdb
саме для цього!
Ви можете запустити програму 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 має безкоштовне "Особисте" видання, а 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)
B. У межах перекладача
Розробляючи ранні версії модулів і експериментуючи з цим більш ітеративно.
$ 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. Зсередини вашої програми
Для великого проекту та довго працюючого модуля можна запустити налагодження всередині програми за допомогою імпорту 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” (print)
а) па
Вимкнення підказки (Pdb)… за допомогою “c” (продовження)
Бачити, де ти ... з "l" (список)
Перехід до підпрограм ... з "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 devs: будь ласка, зосередьтесь на вдосконаленні 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
але ти зазвичай не хочеш цього робити, тому що:
Або ж, як і в сирому pdb 3.2+, ви можете встановити деякі точки перерви з командного рядка:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
хоча -c c
порушено чомусь: https://github.com/gotcha/ipdb/isissue/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
замість цього: демонстраціяТакож можливо програматизувати кроки та відстежувати код python (і це просто!). Перегляньте документацію на sys.settrace () для отримання більш детальної інформації. Також ось підручник для початку роботи.
Visual Studio з PTVS може стати для вас варіантом: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm - це IDE для Python, що включає відладчик. Перегляньте це відео на YouTube, щоб ознайомитись із використанням налагоджувача PyCharm для переходу коду.
Підручник PyCharm - Налагодження коду python за допомогою PyCharm
Примітка. Це не передбачається схвалення чи огляд. PyCharm - комерційний продукт, за який потрібно платити, але компанія надає безкоштовну ліцензію студентам та викладачам, а також "легку" версію спільноти, яка є безкоштовною та відкритим.