In Java/C# you can easily step through code to trace what might be going wrong, and IDE’s make this process very user friendly. Can you trace through python code in a similar fashion?
97.1k 90 90 gold badges 409 409 silver badges 878 878 bronze badges
asked Feb 8, 2011 at 3:21
259k 323 323 gold badges 764 764 silver badges 1196 1196 bronze badges
14 Answers 14
Yes! There’s a Python debugger called pdb just for doing that!
You can launch a Python program through pdb via python -m pdb myscript.py .
There are a few commands you can then issue, which are documented on the pdb page.
Some useful ones to remember are:
- b : set a breakpoint
- c : continue debugging until you hit a breakpoint
- s : step through the code
- n : to go to next line of code
- l : list source code for the current file (default: 11 lines including the line being executed)
- u : navigate up a stack frame
- d : navigate down a stack frame
- p : to print the value of an expression in the current context
If you don’t want to use a command line debugger, some IDEs like Pydev, Wing IDE or PyCharm have a GUI debugger. Wing and PyCharm are commercial products, but Wing has a free «Personal» edition, and PyCharm has a free community edition.
Отладчик в VS Code: базовые возможности (Python)
3,438 1 1 gold badge 23 23 silver badges 48 48 bronze badges
answered Feb 8, 2011 at 3:26
user193476 user193476
Wow, I cannot believe I’m having a hard time finding a graphical pdb for linux/ubuntu. Am I missing something? I might have to look into making a SublimeText Plugin for it.
Apr 6, 2014 at 9:52
PyCharm is pretty good as a graphical debugger, and its Community Edition is free!
Feb 4, 2017 at 15:45
Jun 11, 2018 at 19:45
pdb is not a command line tool. To use it, use python -m pdb your_script.py .
Nov 5, 2018 at 6:08
Jul 7, 2020 at 2:47
By using Python Interactive Debugger ‘pdb’##
First step is to make the Python interpreter to enter into the debugging mode.
A. From the Command Line
Most straight forward way, running from command line, of python interpreter
$ python -m pdb scriptName.py > . /pdb_script.py(7)() -> «»» (Pdb)
B. Within the Interpreter
While developing early versions of modules and to experiment it more iteratively.
$ 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()’) > (1)() (Pdb)
C. From Within Your Program
For a big project and long-running module, can start the debugging from inside the program using import pdb and set_trace() like this :
#!/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()
Step-by-Step debugging to go into more internal
Как найти ошибку в коде Работа с отладчиком
- Execute the next statement… with “n” (next)
- Repeating the last debugging command… with ENTER
- Quitting it all… with “q” (quit)
- Printing the value of variables… with “p” (print) a) p a
- Turning off the (Pdb) prompt… with “c” (continue)
- Seeing where you are… with “l” (list)
- Stepping into subroutines… with “s” (step into)
- Continuing… but just to the end of the current subroutine… with “r” (return)
- Assign a new value a) !b = «B»
- Set a breakpoint a) break linenumber b) break functionname c) break filename:linenumber
- Temporary breakpoint a) tbreak linenumber
- Conditional breakpoint a) break linenumber, condition
Note: All these commands should be execute from pdb
For in-depth knowledge, refer:
Источник: stackoverflow.com
[] Отладка и Логирование в Python | Ключевые знания для начинающих
Отладка — важный навык для любого программиста, и Python предлагает несколько техник, которые помогут вам найти и исправить ошибки в вашем коде. В этой статье мы рассмотрим некоторые из этих методов, чтобы вы могли более эффективно отлаживать свои программы на Python.
Что такое отладка?
Прежде чем перейти к рассмотрению самих методов отладки, давайте сначала определим, что такое отладка. Согласно Википедии, отладка — это процесс поиска и исправления ошибок в компьютерной программе. Он включает в себя использование различных инструментов и методов для поиска ошибок и их устранения из системы.
Почему отладка важна?
Отладка важна, потому что она позволяет выявить и исправить ошибки в коде до того, как они приведут к проблемам. Это может сэкономить время и усилия в долгосрочной перспективе, а также повысить качество и надежность вашего программного обеспечения. Кроме того, отладка помогает узнать больше о том, как работает ваш код, что может быть полезно для будущих проектов.
Техники отладки в Python
print()
Одним из самых простых и основных методов отладки является вставка в код операторов печати ( print ).
Эти операторы помогут вам увидеть значения переменных в различных точках вашей программы, что поможет вам определить, где возникает проблема.
Отладчик pdb
Отладчик Python — это мощный инструмент, который позволяет просматривать код построчно и проверять значения переменных и выражений на каждом шаге. Это поможет вам определить источник ошибок в вашем коде и получить более глубокое понимание того, как выполняется ваша программа.
Чтобы использовать отладчик, сначала нужно импортировать модуль pdb, который расшифровывается как «Python Debugger». Затем вы можете вставить оператор pdb.set_trace() в то место вашего кода, где вы хотите начать отладку. Этот оператор устанавливает точку прерывания в вашем коде и приостанавливает выполнение, позволяя вам изучить текущее состояние вашей программы.
Когда программа приостановлена, вы можете использовать различные команды для просмотра кода и изучения переменных и выражений. Вот некоторые из наиболее часто используемых команд:
- n (next) : Выполняет текущую строку кода и переходит к следующей строке.
- s (step) : Переход к вызову функции в текущей строке.
- r (return) : Продолжает выполнение до возврата текущей функции.
- c (продолжить) : Продолжает выполнение до следующей точки прерывания.
- p (print) : Выводит значение переменной или выражения.
- l (list) : Показывает текущий участок выполняемого кода.
- h (help) : Показывает список доступных команд.
Я написал небольшую программу, где мы можем увидеть pdb в действии:
Источник: dzen.ru
Отладка кода в Python
Стандартная библиотека Python включает в себя интерактивную библиотеку отладки под названием PDB.PDB имеет широкие возможности, наиболее распространенные является способностью «пошаговая» программой.
Чтобы сразу войти в пошаговую отладку, используйте:
python -m pdb
Это запустит отладчик в первой строке программы.
Обычно вы хотите нацелить определенный раздел кода для отладки. Для этого мы импортируем библиотеку pdb и используем _set_trace () _, чтобы прервать поток этого проблемного примера кода.
import pdb def divide(a, b): pdb.set_trace() return a/b # What’s wrong with this? Hint: 2 != 3 print divide(1, 2)
Запуск этой программы запустит интерактивный отладчик.
python foo.py > ~/scratch/foo.py(5)divide() -> return a/b (Pdb)
Часто эта команда используется в одной строке, поэтому ее можно закомментировать одним символом #
import pdf; pdb.set_trace()
В (PDB) можно ввести оперативные команды. Эти команды могут быть командами отладчика или python. Для печати переменных можно использовать р из отладчика, или печать питона.
(Pdb) p a 1 (Pdb) print a 1
Чтобы увидеть список всех локальных переменных, используйте
locals
Это хорошие команды отладчика, которые нужно знать:
b | : set breakpoint at line *n* or function named *f*. # b 3 # b divide b: show all breakpoints. c: continue until the next breakpoint. s: step through this line (will enter a function). n: step over this line (jumps over a function). r: continue until the current function returns. l: list a window of code around this line. p : print variable named *var*. # p x q: quit debugger. bt: print the traceback of the current execution call stack up: move your scope up the function call stack to the caller of the current function down: Move your scope back down the function call stack one level step: Run the program until the next line of execution in the program, then return control back to the debugger next: run the program until the next line of execution in the current function, then return control back to the debugger return: run the program until the current function returns, then return control back to the debugger continue: continue running the program until the next breakpoint (or set_trace si called again)
Отладчик также может оценить python в интерактивном режиме:
-> return a/b (Pdb) p a+b 3 (Pdb) [ str(m) for m in [a,b]] [‘1’, ‘2’] (Pdb) [ d for d in xrange(5)] [0, 1, 2, 3, 4]
Если какие — либо из ваших имен переменных совпадают с командами отладчика, используйте восклицательный знак ‘! ‘перед переменной, чтобы явно ссылаться на переменную, а не на команду отладчика. Например, часто может случиться так , что вы используете имя переменной «C» для счетчика, и вы можете распечатать его в отладчике. команда просто «C» будет продолжать выполнение до следующей точки останова. Вместо того, чтобы использовать «C!» , Чтобы вывести значение переменной следующим образом :
(Pdb) !c 4
Через IPython и ipdb
Если IPython (или Jupyter ) установлены, отладчик может быть вызван:
import ipdb ipdb.set_trace()
По достижении код выйдет и напечатает:
/home/usr/ook.py(3)() 1 import ipdb 2 ipdb.set_trace() —-> 3 print(«Hello world!») ipdb>
Понятно, что это означает, что нужно редактировать код. Есть более простой способ:
from IPython.core import ultratb sys.excepthook = ultratb.FormattedTB(mode=’Verbose’, color_scheme=’Linux’, call_pdb=1)
Это приведет к вызову отладчика в случае возникновения необработанного исключения.
Удаленный отладчик
Иногда вам нужно отлаживать код питона , который выполняется другим процессом и и в этом случае rpdb пригодится.
rpdb — это оболочка для pdb, которая перенаправляет stdin и stdout в обработчик сокетов. По умолчанию он открывает отладчик на порт 4444
# In the Python file you want to debug. import rpdb rpdb.set_trace()
И тогда вам нужно запустить это в терминале, чтобы подключиться к этому процессу.
# Call in a terminal to see the output $ nc 127.0.0.1 4444
И вы получите PDB Promt
> /home/usr/ook.py(3)() -> print(«Hello world!») (Pdb)
Источник: www.codecamp.ru