何时使用Python调试器

7 投票
6 回答
1149 浏览
提问于 2025-04-11 09:26

因为Python是一种动态的、解释型的语言,所以你在运行代码之前不需要编译它。这意味着你可以很轻松地写代码、运行它,看看出现了什么问题,然后再去修复这些问题。使用快捷键或者宏命令可以让这个过程变得非常快速。

所以,由于你可以很方便地立即看到程序的输出和可能出现的错误,我还没有使用调试工具。那么,什么情况下需要用到真正的调试器,而不是我现在使用的方法呢?

我想在遇到问题之前就了解这些,以免到时候因为不知道怎么解决而感到沮丧。

6 个回答

6

通常,当错误隐藏在某个函数里,而我又不知道具体是什么或者在哪里时,我会很头疼。要么我插入很多 log.debug() 的调用,然后再把它们删掉,要么我就直接放入:

import pdb
pdb.set_trace ()

然后运行程序。当程序运行到那一点时,调试器会启动,这样我就可以进入一个完整的交互式环境,随便查看和测试。

9

在我30年的编程生涯中,我只用过调试器4次。每次都是为了查看一个C程序崩溃后生成的core文件,目的是找到里面的错误追踪信息。

我觉得调试器并没有太大帮助,即使是在编译型语言中。很多人喜欢用调试器,我相信他们一定有一些理由,否则不会对它们如此热爱和用心。

关键是——软件是知识的记录

没错,软件必须能运行。但更重要的是,软件有意义

这并不是在指责你使用调试器。不过,我发现那些依赖调试的人,有时会写出一些奇怪的代码,而他们并不能很好地解释这些代码的意义。他们只能说“这可能是个小窍门,但它能工作。”

我对调试器的建议是“别费心了”。

“可是,如果我完全搞不懂呢?”你问,“那我应该学调试器吗?”你到底是对什么完全搞不懂?是语言本身?Python其实很简单,不会让人完全困惑。是某个库吗?也许吧。

无论有没有调试器,你可以这样做:

  1. 你有源代码,先读一读。
  2. 你可以写一些小测试来试用这个库。如果可能的话,使用交互式命令行。[所有优秀的库似乎都能通过交互式Python模式展示它们的功能——我也努力做到这种紧凑、清晰的简单性。]
  3. 你有源代码,可以加一些打印函数。
8

我使用pdb来进行基本的Python调试。以下是我使用它的一些情况:

  • 当你有一个循环要处理10万个条目,并且想在特定的地方暂停时,这个工具非常有用。(条件断点)
  • 跟踪别人代码的执行流程。
  • 使用调试工具总比到处加打印语句要好。
  • 通常,导致错误的地方可能不止一个,第一次看可能不太明显。所以你会先检查一些明显的地方,如果那里没问题,就继续往下看,可能还会加一些打印语句。使用调试工具可以节省时间,你不需要加打印语句然后再运行代码。

撰写回答