Как отладить программу на питоне

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

Как найти ошибку в коде Работа с отладчиком

  1. Execute the next statement… with “n” (next)
  2. Repeating the last debugging command… with ENTER
  3. Quitting it all… with “q” (quit)
  4. Printing the value of variables… with “p” (print) a) p a
  5. Turning off the (Pdb) prompt… with “c” (continue)
  6. Seeing where you are… with “l” (list)
  7. Stepping into subroutines… with “s” (step into)
  8. Continuing… but just to the end of the current subroutine… with “r” (return)
  9. Assign a new value a) !b = «B»
  10. Set a breakpoint a) break linenumber b) break functionname c) break filename:linenumber
  11. Temporary breakpoint a) tbreak linenumber
  12. 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)

Читайте также:
Какая программа читает bin файлы

Отладчик также может оценить 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru