何时使用Python调试器

时间:2008-10-08 07:49:02

标签: python debugging

由于Python是一种动态的解释语言,因此在运行代码之前不必编译代码。因此,只需编写代码,运行代码,查看发生的问题并修复它们就非常容易。使用热键或宏可以非常快速。

因此,因为很容易立即看到程序的输出和可能发生的任何错误,所以我还没有使用调试工具。有什么情况可以要求使用真正的调试器而不是我目前使用的方法?

在我陷入困境之前我想知道,因为我不知道如何解决这个问题而感到沮丧。

6 个答案:

答案 0 :(得分:8)

在30年的编程中,我使用了4次调试器。所有四次都是读取从C程序生成的core文件崩溃,以找到埋在那里的追溯信息。

我认为即使在编译语言中,调试器也没有多大帮助。很多人喜欢调试器,使用它们有一些原因,我敢肯定,或者人们不会对它们充满爱和关怀。

重点 - 软件是知识捕获

是的,它必须运行。但更重要的是,软件具有含义

这不是对使用调试器的起诉。但是,我发现那些依赖于调试的人有时会生成看起来很奇怪的代码,并且没有很好的理由来说明意味着什么。他们只能说“它可能是一个黑客,但它有效。”

我对调试器的建议是“不要打扰”。

“但是,如果我完全难倒怎么办?”你问,“那我应该学习调试器吗?”完全被什么难过?语言? Python太简单了,无法彻底迷惑。有些图书馆?也许

无论是否使用调试器,您都可以这样做。

  1. 你有来源,请阅读。
  2. 你写小测试来练习图书馆。如果可能,使用交互式shell。 [所有非常好的库似乎都使用交互式Python模式展示了它们的功能 - 我努力实现这种紧凑,清晰的简单。]
  3. 您有源,添加打印功能。

答案 1 :(得分:7)

我使用pdb进行基本的python调试。我使用它的一些情况是:

  • 当你有一个循环迭代超过100,000个条目并想要在特定点休息时,它会变得非常有用。(条件中断)
  • 跟踪别人代码的控制流程。
  • 使用调试器总是比使用print打印代码更好。
  • 通常情况下,可能会有多个故障点导致错误,所有这些都在第一眼看上去并不明显。所以你寻找明显的地方,如果没有什么问题,你继续前进并添加更多的打印..调试器可以节省你的时间在这里,你不需要添加打印并再次运行。

答案 2 :(得分:6)

通常当错误被隐藏在某些功能中时,我不确切地知道什么或在哪里。要么我插入几十个log.debug()电话,然后必须将它们取回,或者只是放入:

import pdb
pdb.set_trace ()

然后运行该程序。调试器将在到达该点时启动,并为我提供一个完整的REPL来进行调整。

答案 3 :(得分:2)

任何时候您想检查可能导致错误的变量的内容。你能做到的唯一方法就是停止执行并查看堆栈。

如果您正在寻找一个,那么Eclipse中的pydev是一个非常好的IDE。

答案 4 :(得分:1)

我发现在失败的测试用例中放入调试器非常有用。

我在测试失败点之前添加import pdb; pdb.set_trace()。测试运行,构建可能非常大的上下文(例如,导入数据库夹具或构建HTTP请求)。当测试到达pdb.set_trace()行时,它会进入交互式调试器,我可以使用通常的pdb命令检查发生故障的上下文,寻找原因的线索。

答案 5 :(得分:0)

您可能想看看其他SO帖子:

Why is debugging better in an IDE?

这与你所询问的内容直接相关。