Python调试器:交互式调试与硬编码断点

3
什么是交互式调试 (python -m pdb foo.py) 和硬编码断点 (import pdb; pdb.set_trace()) 之间的区别?
大多数关于调试器的教程只关注具体命令的使用,但了解以下内容会更有趣:
- 在选择调试模式方面,最佳实践是什么? - 它们在计算时间方面是否有不同的性能?
1个回答

4

python -m pdb foo.py会在程序一开始就将您带入调试器。这在非常小的程序中非常有用,您想要将其作为整体进行分析。

在更大更复杂的程序中,当您想要研究的情况出现在一个高函数调用堆栈的顶部经过重要计算后,这种用法非常不实用。

在这种情况下,通常更容易使用import pdb; pdb.set_trace()在源代码中有趣情况发生的位置设置硬断点。然后您正常启动程序,它正常执行,可能需要很长时间执行许多计算而没有您的干预,直到达到您关心的点。只有当您到达感兴趣的点时,调试器才会要求您介入。

至于性能方面:在第一种情况下,您将不得不逐个语句地步进;在第二种情况下,只有在到达感兴趣的点时才会调用调试器。

在第一种情况下,CPU 几乎所有时间都在等待人类响应;在第二种情况下,它大部分时间都在执行程序,直到到达感兴趣的点。


“在第一种情况下,您将不得不逐个语句地进行步进以便前进”是什么意思?我发现如果函数调用堆栈很高,pdb会变得非常慢,为什么会这样?谢谢@jacg! - Jiang Xiang
迟到三年总比不来得好!程序在执行代码的微小部分后会停止,用户必须通过给出调试器命令(如nsr,代表next(下一行)、step(进入函数)和(继续执行直到) return(从当前函数返回))来指示它继续执行。 - jacg

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