python 调试器
Python编程语言的强大功能和灵活性源于强大的标准库和丰富的第三方软件生态系统。 Python程序员可以利用许多有用的工具,并且这些工具也可以扩展到调试。
可以使用许多具有调试功能的Python IDE, 第三方Python调试器或专用工具来调试Python程序,但是交互式调试也已内置在该语言中。 您可以在Python程序中调用交互式调试作为其正常执行的一部分。
在这里,我们将快速浏览如何使用Python的内置交互式调试器pdb
。
Python调试器示例
pdb
模块是Python标准库的一部分,因此不需要单独安装。 它可以直接调用。 这是使用pdb
的简单示例:
import pdb x=0 while True: x+=1 print ("Current number:", x) pdb.set_trace()
在Python 3.7和更高版本中,您可以(并且应该)使用新的内置函数breakpoint()
代替pdb.set_trace()
。 (在运行breakpoint()
时会自动导入pdb
。)
x=0 while True: x+=1 print ("Current number:", x) breakpoint()
当您运行上述程序时,您会看到Current number: 1
,然后出现提示: (Pdb)
。 此提示表明调试器已启动并正在等待在当前堆栈帧的上下文中执行的命令。
Python调试器命令
以下是pdb
中一些最常用的命令:
p
/ pp
:打印表达式
打印(或“漂亮打印”)某些表达式的结果。 如果运行上述程序并在第一个断点处键入px
,则应该看到1
(该点处x
的值)。
c
:继续
继续执行程序的正常执行,直到遇到另一个断点。 键入c
,然后在下一个断点处输入px
,您应该看到2
(在另一个循环循环后x
的值)。
s
:向前走
在程序中前进一行。 执行该行后,将重新出现pdb
提示符。
l
:列表来源
在执行的特定点打印程序的源代码。 当前行将出现在打印输出的中间,旁边是一个箭头。
w
:打印堆栈跟踪
此时显示程序的整个堆栈。 这样,您就可以查看当前模块在上下文中的位置以及其他所有正在执行的事情。
!
:执行语句
可以在当前运行的模块的上下文中执行任何有效的Python语句,只需在其前面加上感叹号即可。 对于上面的示例,在pdb
提示符下,您可以键入!x=100
来将x
设置为100。(请注意,表达式中没有空格;任何空格都将被视为Python语法缩进。)
使用pdb进行条件调试
由于您仅可以使用Python语句调用调试器,因此可以有条件地弹出调试器-例如,使用if/then
或try/except
块。 这是处理某些情况出现时出现的问题的便捷方法。
执行条件调试的另一种方法是使用命令pdb.run()
评估Python语句,或者使用pdb.runeval()
评估Python表达式:
pdb.run('x+=1') pdb.runeval('x==0')
当执行这些命令时,表达式或语句在pdb
控制下求值。 因此,您可以在运行时动态构造表达式或语句,并使用pdb
查看它们如何消失。
要了解pdb
其他功能,请深入研究Python官方调试器文档 。
翻译自: https://www.infoworld.com/article/3327196/how-to-use-the-python-debugger.html
python 调试器