调试Python解释器中的代码

xra*_*alf 14 python debugging interpreter function functional-testing

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

如果是这样,你能展示基本的调试器操作(启动带参数的函数,设置断点,下一步,步入,观察变量)?如果没有,你会如何以另一种方式调试函数?

关键是,我想只调试一个将提供参数的特定函数.我不想调试整个模块代码.

谢谢你的建议

小智 12

如果你想调试特定的功能,你可以使用这个 -

>>> import pdb
>>> import yourmodule
>>> pdb.run('yourmodule.foo()')
Run Code Online (Sandbox Code Playgroud)

通过命令行.pdb.set_trace()应该添加到你的函数中以打破它.

关于pdb的更多信息可以在这里看到 - http://docs.python.org/library/pdb.html


Bit*_*nce 7

请参阅pdb模块.插入代码:

import pdb
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

......做一个断点.


小智 5

无需修改调试代码即可包含pdb.set_trace(). 该调用可以在调试代码之前直接在解释器中进行:

>>> import pdb
>>> pdb.set_trace(); <code-to-debug>
Run Code Online (Sandbox Code Playgroud)

例如,给出test_script.py以下代码:

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

some_func使用调试器命令 step-into ( s)、next ( n) 和 continue ( )进行调试的解释器会话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
>>> 
Run Code Online (Sandbox Code Playgroud)

pdb有关如何使用调试器的更多信息,请参阅模块的文档: http://docs.python.org/library/pdb.html

此外,在使用调试器时,该help命令提供了一个很好的命令列表,并help <command>提供特定于给定命令的帮助。