由于Python是一种动态的解释语言,因此在运行代码之前不必编译代码。因此,只需编写代码,运行代码,查看发生的问题并修复它们就非常容易。使用热键或宏可以非常快速。
因此,因为很容易立即看到程序的输出和可能发生的任何错误,所以我还没有使用调试工具。有什么情况可以要求使用真正的调试器而不是我目前使用的方法?
在我陷入困境之前我想知道,因为我不知道如何解决这个问题而感到沮丧。
答案 0 :(得分:8)
在30年的编程中,我使用了4次调试器。所有四次都是读取从C程序生成的core
文件崩溃,以找到埋在那里的追溯信息。
我认为即使在编译语言中,调试器也没有多大帮助。很多人喜欢调试器,使用它们有一些原因,我敢肯定,或者人们不会对它们充满爱和关怀。
重点 - 软件是知识捕获。
是的,它必须运行。但更重要的是,软件具有含义。
这不是对您使用调试器的起诉。但是,我发现那些依赖于调试的人有时会生成看起来很奇怪的代码,并且没有很好的理由来说明意味着什么。他们只能说“它可能是一个黑客,但它有效。”
我对调试器的建议是“不要打扰”。
“但是,如果我完全难倒怎么办?”你问,“那我应该学习调试器吗?”完全被什么难过?语言? Python太简单了,无法彻底迷惑。有些图书馆?也许
无论是否使用调试器,您都可以这样做。
答案 1 :(得分:7)
我使用pdb进行基本的python调试。我使用它的一些情况是:
答案 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)