
我们承认,我们可以使用一些很棒的调试工具,而且它们有时确实非常有用。但大多数时候,我们只是在运行的程序中插入一些打印语句,以便更好地理解程序内部的情况。[Loop Invariant] 想指出,有些功能是正规调试器可以做到的,而打印语句却做不到。
那么这些神奇的功能到底是什么呢?当然,其中一些依赖于调试器。但通常情况下,调试器会在异常发生时捕获它们。这非常有用,尤其是在你有很多异常,又不想每个异常都写打印语句的情况下。与之相关的是,当调试器因为异常甚至断点而停止时,你可以遍历调用堆栈,查看到达该位置之前的代码流程。
事实上,有些调试器可以回退,尽管并非所有调试器都支持。另一个优点是可以动态地计算表达式的值。更棒的是,你可以改变程序流程,例如跳过某些代码。
所以我们明白了。调试不仅仅是粗糙的打印语句。再说一次,有很多 Python 库可以让调试打印更流畅(包括IceCream )。或者编写你自己的调试器。如果 gdb 的用户界面让你望而却步,还有其他选择。