2012-04-24 4 views
8

Мне нравятся функции тестирования в Python-интерпретаторе. Можно ли отлаживать функцию в интерпретаторе Python, когда я хочу увидеть больше, чем возвращаемое значение и побочный эффект?Код отладки в интерпретаторе Python

Если да, можете ли вы показать основные операции отладчика (запуск функции с аргументами, установка точки останова, следующий шаг, переход на, просмотр переменной)? Если нет, как бы вы отлаживали функцию по-другому?

Дело в том, что я хочу отлаживать только определенную функцию, которая будет снабжаться аргументами. Я не хочу отлаживать код всего модуля.

благодарит вас за консультацию

+1

Вы искали 'pdb' с помощью Google? – hochl

+0

@hochl Я думал, что pdb - это приложение (что-то вроде gdb для языка C), и я не знал, что это модуль. Я попробую, если он сможет отлаживать определенную функцию. – xralf

+0

Это - 'pdb' - это путь, читайте [описание модуля] (http://docs.python.org/library/pdb.html). – hochl

ответ

6

Если вы хотите отладить конкретную функцию, которую вы можете использовать это -

>>> import pdb 
>>> import yourmodule 
>>> pdb.run('yourmodule.foo()') 

через командную строку. pdb.set_trace() следует добавить в вашу функцию, чтобы прорубить его.

Более подробную информацию о PDB можно увидеть здесь - http://docs.python.org/library/pdb.html

+1

Могу ли я узнать номера строк, где я должен установить точку перерыва в интерпретаторе, или я должен узнать это из редактора? – xralf

+0

ОК, теперь я понимаю. Я должен поместить 'pdb.set_trace()' в мой исходный код. Хорошая работа, спасибо. Я этого раньше не понимал. – xralf

6

См. Модуль pdb. Вставить в код:

import pdb 
pdb.set_trace() 

... делает точку останова.

1

отладки кода в не должны быть изменены, чтобы включить pdb.set_trace(). Этот вызов может быть сделано непосредственно в интерпретаторе непосредственно перед отладки кода в:

>>> import pdb 
>>> pdb.set_trace(); <code-to-debug> 

Например, при test_script.py со следующим кодом:

def some_func(text): 
    print 'Given text is {}'.format(repr(text)) 
    for index,char in enumerate(text): 
     print ' '*index, char 

переводчик сеанса отладки some_func с помощью отладчик команд ступенчатую в (s), следующий (n) и продолжить (c) будет выглядеть следующим образом:

>>> import pdb 
>>> import test_script 
>>> pdb.set_trace(); test_script.some_func('hello') 
--Call-- 
> c:\src\test_script.py(1)some_func() 
-> def some_func(text): 
(Pdb) s 
> c:\src\test_script.py(2)some_func() 
-> print 'Given text is {}'.format(repr(text)) 
(Pdb) n 
Given text is 'hello' 
> c:\src\test_script.py(3)some_func() 
-> for index,char in enumerate(text): 
(Pdb) c 
h 
    e 
    l 
    l 
    o 
>>> 

Смотрите документацию для pdb модуля для получения дополнительной информации о том, как использовать отладчик: http://docs.python.org/library/pdb.html

Кроме того, при использовании отладчика, команда help обеспечивает хороший список команд и help <command> дает помощь специфична для данной команды.

Смежные вопросы