何时使用Python调试器
因为Python是一种动态的、解释型的语言,所以你在运行代码之前不需要编译它。这意味着你可以很轻松地写代码、运行它,看看出现了什么问题,然后再去修复这些问题。使用快捷键或者宏命令可以让这个过程变得非常快速。
所以,由于你可以很方便地立即看到程序的输出和可能出现的错误,我还没有使用调试工具。那么,什么情况下需要用到真正的调试器,而不是我现在使用的方法呢?
我想在遇到问题之前就了解这些,以免到时候因为不知道怎么解决而感到沮丧。
6 个回答
6
通常,当错误隐藏在某个函数里,而我又不知道具体是什么或者在哪里时,我会很头疼。要么我插入很多 log.debug()
的调用,然后再把它们删掉,要么我就直接放入:
import pdb
pdb.set_trace ()
然后运行程序。当程序运行到那一点时,调试器会启动,这样我就可以进入一个完整的交互式环境,随便查看和测试。
9
在我30年的编程生涯中,我只用过调试器4次。每次都是为了查看一个C程序崩溃后生成的core
文件,目的是找到里面的错误追踪信息。
我觉得调试器并没有太大帮助,即使是在编译型语言中。很多人喜欢用调试器,我相信他们一定有一些理由,否则不会对它们如此热爱和用心。
关键是——软件是知识的记录。
没错,软件必须能运行。但更重要的是,软件有意义。
这并不是在指责你使用调试器。不过,我发现那些依赖调试的人,有时会写出一些奇怪的代码,而他们并不能很好地解释这些代码的意义。他们只能说“这可能是个小窍门,但它能工作。”
我对调试器的建议是“别费心了”。
“可是,如果我完全搞不懂呢?”你问,“那我应该学调试器吗?”你到底是对什么完全搞不懂?是语言本身?Python其实很简单,不会让人完全困惑。是某个库吗?也许吧。
无论有没有调试器,你可以这样做:
- 你有源代码,先读一读。
- 你可以写一些小测试来试用这个库。如果可能的话,使用交互式命令行。[所有优秀的库似乎都能通过交互式Python模式展示它们的功能——我也努力做到这种紧凑、清晰的简单性。]
- 你有源代码,可以加一些打印函数。
8
我使用pdb来进行基本的Python调试。以下是我使用它的一些情况:
- 当你有一个循环要处理10万个条目,并且想在特定的地方暂停时,这个工具非常有用。(条件断点)
- 跟踪别人代码的执行流程。
- 使用调试工具总比到处加打印语句要好。
- 通常,导致错误的地方可能不止一个,第一次看可能不太明显。所以你会先检查一些明显的地方,如果那里没问题,就继续往下看,可能还会加一些打印语句。使用调试工具可以节省时间,你不需要加打印语句然后再运行代码。