在Python解释器中调试代码

在Python解释器中调试代码,python,debugging,function,interpreter,functional-testing,Python,Debugging,Function,Interpreter,Functional Testing,我喜欢在Python解释器中测试函数。当我希望看到的不仅仅是返回值和副作用时,是否可以在Python解释器中调试函数 如果是这样,您能否显示基本的调试器操作(使用参数启动函数、设置断点、下一步、单步执行、监视变量)?如果不是,您将如何以另一种方式调试函数 关键是,我只想调试一个特定的函数,该函数将随参数一起提供。我不想调试整个模块代码 感谢您的建议参见pdb模块。在代码中插入: import pdb pdb.set_trace() 。。。创建断点。如果要调试特定函数,可以使用以下命令- >

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

如果是这样,您能否显示基本的调试器操作(使用参数启动函数、设置断点、下一步、单步执行、监视变量)?如果不是,您将如何以另一种方式调试函数

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


感谢您的建议参见pdb模块。在代码中插入:

import pdb
pdb.set_trace()

。。。创建断点。

如果要调试特定函数,可以使用以下命令-

>>> import pdb
>>> import yourmodule
>>> pdb.run('yourmodule.foo()')
通过命令行<应该在函数中添加code>pdb.set_trace(),以在那里中断


有关pdb的更多信息,请参见此处-

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

>>> import pdb
>>> pdb.set_trace(); <code-to-debug>
使用调试器命令调试
某些函数的解释器会话将步进(
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
模块的文档:


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

您是否使用Google搜索过
pdb
?@hochl我认为pdb是一个应用程序(类似于C语言的gdb),但我不知道它是一个模块。如果它能够调试特定的函数,我将尝试它。它是--
pdb
是一种方法,请阅读。我可以找出行号,我应该在解释器中的何处设置断点,还是应该从编辑器中找到它?好的,现在我明白了。我应该在源代码中放置
pdb.set_trace()
。干得好,谢谢。我以前没有理解过。啊哈,很好,我需要逐步完成的代码需要大量的设置,所以被接受的答案最终是一个巨大的痛苦-尽管这非常有效。
>>> 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
>>>