在Python解释器中调试代码

16

我喜欢在Python解释器中测试函数。当我想查看不仅仅是返回值和副作用时,是否可以在Python解释器中调试函数?

如果可以,请展示基本的调试器操作(使用参数启动函数,设置断点,下一步,步入,观察变量)? 如果不行,你会怎样调试函数呢?

重点是,我只想调试提供参数的特定函数。我不想调试整个模块代码。

谢谢您的建议。


1
你用谷歌搜索过 pdb 吗? - hochl
@hochl 我原本以为pdb是一个应用程序(类似于C语言的gdb),并不知道它是一个模块。如果它能够调试特定的函数,我会尝试使用它。 - xralf
这是-- pdb 是正确的选择,请阅读模块描述 - hochl
3个回答

12

如果你想要调试特定的函数,可以使用以下方法 -

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

在命令行中使用pdb.set_trace()在您的函数中添加以在该位置中断。

有关pdb的更多信息,请参见此处 - http://docs.python.org/library/pdb.html


1
我可以在解释器中找到应该设置断点的行号吗?还是应该从编辑器中找出它呢? - xralf
好的,现在我明白了。我应该在我的源代码中放置pdb.set_trace()。干得好,谢谢。我之前没有理解它。 - xralf

7
请参考pdb模块。将以下代码插入到您的程序中:
import pdb
pdb.set_trace()

...使程序中断。


5
代码不需要修改以包含“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

使用调试器命令step-into(s)、next(n)和continue(c),进行解释器会话以调试some_func,看起来像这样:

>>> 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>则提供了特定命令的帮助。

哦,不错啊,我需要逐步执行的代码需要进行大量设置,所以被接受的答案最终变得非常麻烦 - 不过这个方法非常好用。 - Izkata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接