Поиск по блогу

пятница, 3 января 2014 г.

Как пользоваться дебаггером PDB iPDB Python

При отладке кода... даже чужого стандартных сообщений об ошибках не хватает. В частности, не мог понять, как отслеживать значения переменных внутри функций класса. Посмотрел несколько случайных роликов, но чувствую, что нужна система и справочник по командам "под рукой".
Однако, с чего начать? Родная документация практически отсутствует
Поиск на сайте iPython
Однако, вот подробная и отличная статья
А в этом блоге краткийсправочник комманд
In []:
#Here I make a short summary for reference purposes:

#“import pdb” or “import ipdb as pdb“, then “pdb.set_trace()“
n (next)
ENTER (repeat previous)
q (quit)
p <variable> (print value)
c (continue till the next pdb.set_trace())
l (list where you are)
s (step into subroutine)
r (continue till the end of the subroutine)
! <python command>
Руководство немного устарели, pdb уже стоит по умолчанию... Потому сразу пробуем
In [3]:
pdb
Automatic pdb calling has been turned ON

In [*]:
help(pdb)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-00747656f7d0> in <module>()
----> 1 help(pdb)

NameError: name 'pdb' is not defined
> <ipython-input-4-00747656f7d0>(1)<module>()
----> 1 help(pdb)

ipdb> help

Documented commands (type help <topic>):
========================================
EOF    bt         cont      enable  jump  pdef    psource  run      unt   
a      c          continue  exit    l     pdoc    q        s        until 
alias  cl         d         h       list  pfile   quit     step     up    
args   clear      debug     help    n     pinfo   r        tbreak   w     
b      commands   disable   ignore  next  pinfo2  restart  u        whatis
break  condition  down      j       p     pp      return   unalias  where 

Miscellaneous help topics:
==========================
exec  pdb

Undocumented commands:
======================
retval  rv

ipdb> where
> <ipython-input-4-00747656f7d0>(1)<module>()
----> 1 help(pdb)

ipdb> whatis
*** SyntaxError: SyntaxError('unexpected EOF while parsing', ('<string>', 0, 0, ''))
ipdb> commands
(com) q
(com) exit
ipdb> help l

Здесь, оказывается есть и список команд и целый готовый интерфейс. Для получения справки о команде достаточно набрать
ipdb> help
Но как всем этим (вместе) пользоваться? Каковы правила и принципы... Вернемся к подробной статье (см.выше)
In [7]:
from IPython.display import HTML
HTML('<iframe src=https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/ width=800 height=350></iframe>')
Out[7]:
Здесь дано подробное описание минимального необходимого набора команд (приведенного в начале статьи). Под постом во фрейме более сотни комментариев.
А в видео внизу разбирается пример дебаггинга программы с двумя вложенными функциями. Все те же операторы, к ним добавлены l,w b(break)
Чтобы добавить точку останова на 21-первой строке кода достаточно набрать в дебаггере "b 21" (без кавычек) и посмотреть строки с 16 по 26 - набрать "l 21"
In [2]:
from IPython.display import YouTubeVideo
YouTubeVideo('bZZTeKPRSLQ')
Out[2]:
Для более улглубленного изучения можно использовать руководятво Python ...которого я не нашел пока
А также главу из книги Interactive Debugging in Python. Книга понравилась, потому текст во фрейме чуть ниже.
In [8]:
HTML('<iframe src=http://www.onlamp.com/lpt/a/6163 width=800 height=350></iframe>')
Out[8]:

Комментариев нет:

Отправить комментарий