Язык программирования Python

       

Отладка


В интерпретаторе языка Python заложены возможности отладки программ, а в стандартной поставке имеется простейший отладчик - pdb. Следующий пример показывает программу, которая подвергается отладке, и типичную сессию отладки:

# File myfun.py def fun(s): lst = [] for i in s: lst.append(ord(i)) return lst

Так может выглядеть типичный процесс отладки:

>>> import pdb, myfun >>> pdb.runcall(myfun.fun, "ABCDE") > /examples/myfun.py(4)fun() -> lst = [] (Pdb) n > /examples/myfun.py(5)fun() -> for i in s: (Pdb) n > /examples/myfun.py(6)fun() -> lst.append(ord(i)) (Pdb) l 1 #!/usr/bin/python 2 # File myfun.py 3 def fun(s): 4 lst = [] 5 for i in s: 6 -> lst.append(ord(i)) 7 return lst [EOF] (Pdb) p lst [] (Pdb) p vars() {'i': 'A', 's': 'ABCDE', 'lst': []} (Pdb) n > /examples/myfun.py(5)fun() -> for i in s: (Pdb) p vars() {'i': 'A', 's': 'ABCDE', 'lst': [65]} (Pdb) n > /examples/myfun.py(6)fun() -> lst.append(ord(i)) (Pdb) n > /examples/myfun.py(5)fun() -> for i in s: (Pdb) p vars() {'i': 'B', 's': 'ABCDE', 'lst': [65, 66]} (Pdb) r - Return - > /examples/myfun.py(7)fun()->[65, 66, 67, 68, 69] -> return lst (Pdb) n [65, 66, 67, 68, 69] >>>

Интерактивный отладчик вызывается функцией pdb.runcall() и на его приглашение (Pdb) следует вводить команды. В данном примере сессии отладки были использованы некоторые из следующих команд: l (печать фрагмент трассируемого кода), n (выполнить все до следующей строки), s (сделать следующий шаг, возможно, углубившись в вызов метода или функции), p (печать значения), r (выполнить все до возврата из текущей функции).

Разумеется, некоторые интерактивные оболочки разработчика для Python предоставляют функции отладчика. Кроме того, отладку достаточно легко организовать, поставив в ключевых местах программы, операторы print для вывода интересующих параметров. Обычно этого достаточно, чтобы локализовать проблему. В CGI-сценариях можно использовать модуль cgitb, о котором говорилось в одной из предыдущих лекций.



Содержание раздела