我不确定我问的是否可能,但是因为python可能是一个解释器.我正在尝试在开源项目中进行更改,但因为python中没有类型,所以很难知道变量作为数据和它们的作用.您不能只查找var类型的文档,因为您无法确定它是什么类型.我想放到终端,这样我就可以通过输入help(var)或print(var)来快速检查变量的类型和它们的作用.我可以通过更改代码然后每次重新运行程序来执行此操作,但这会慢得多.
假设我有一个程序:
def foo():
a = 5
my_debug_shell()
print a
foo()
Run Code Online (Sandbox Code Playgroud)
my_debug_shell是我要问的函数.它会让我进入python解释器的'>>> shell,在那里我可以输入help(a),它会告诉我a是一个整数.然后我输入'a = 7'和一些'continue'命令,程序继续打印7而不是5,因为我改变了它.
Amb*_*ber 41
http://docs.python.org/library/pdb.html
import pdb
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
Tho*_*asH 28
这是一个不需要更改代码的解决方案:
python -m pdb prog.py <prog_args>
(pdb) b 3
Breakpoint 1 at prog.py:3
(pdb) c
...
(pdb) p a
5
(pdb) a=7
(pdb) ...
Run Code Online (Sandbox Code Playgroud)
简而言之:
一个单行局部简单的办法就是把1/0你想要的断点:这将引发异常,这将是由调试器捕获.这种方法的两个优点是:
以这种方式设置的断点对于代码修改是强健的(不依赖于特定的行号);
一个人不需要import pdb在每个程序中进行调试; 可以在需要的地方直接插入"断点".
为了自动捕获异常,您可以简单地执行python -m pdb prog.py…然后键入c(ontinue)以启动程序.当1/0到达,程序退出,但变量可以被检查照常与pdb调试器(p my_var).现在,这不允许您修复问题并继续运行程序.相反,您可以尝试修复错误并再次运行程序.
如果你想使用强大的IPython shell,ipython -pdb prog.py…做同样的事情,但会导致IPython更好的调试器界面.或者,您可以在IPython shell中执行所有操作:
%pdb)的"异常调试"模式.%run prog.py….发生异常时,调试器会自动激活,您可以检查变量等.后一种方法的优点是(1)IPython shell几乎是必须的; (2)安装完成后,可以通过它轻松完成调试(而不是直接通过pdb模块).在完整的文档可从IPython的页面.
Python3.7有一种新的内置断点方式。
breakpoint()
Run Code Online (Sandbox Code Playgroud)
执行breakpoint()willimport pdb和 call pdb.set_trace()。
请记住包含大括号(),因为它breakpoint是一个函数,而不是关键字。