2017-10-11 122 views
2

交互式调试(python -m pdb foo.py)和硬编码断点(import pdb; pdb.set_trace())之间有什么区别。Python调试器:交互式调试与硬编码断点

上dubuggers大多数教程只focuse上使用特定的命令,而这将是有趣的了解:

  • 什么是选择调试模式的最佳实践?

  • 它们在计算时间方面有不同的性能

回答

2

python -m pdb foo.py会在程序的最开始时将您弹出到调试器中。这对你想整体分析的非常小的程序很有用。

在较大和较复杂的程序中,如果在高功能调用堆栈的顶部进行重要计算后出现要调查的情况,则这种用法是非常不切实际的。

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

至于性能:在第一种情况下,您将不得不逐步通过每一个声明,以提前;在第二种情况下,直到您感兴趣的地方才会调用调试器。

在firt的情况下,CPU花费几乎所有的时间在等待人类的回应;在第二时间里,大部分时间都花在执行程序上,直到达到兴趣点。

+0

这对于'在第一种情况下,你将不得不逐步通过每一个陈述,以提前'这是什么意思?我发现pdb变得非常慢,如果我有一个高功能调用堆栈,为什么?谢谢@jacg! –