有许多方法可以进行调试,使用调试器就是其中之一,但对于谦虚,懒惰的程序员来说,简单的方法就是在代码中添加一堆打印语句。
即
def foo(x):
print 'Hey wow, we got to foo!', x
...
print 'foo is returning:', bar
return bar
这种调试方式是否有正确的名称?
答案 0 :(得分:55)
是的 - 它被称为 printf()
调试,以无处不在的C函数命名:
用于 描述完成的调试工作 插入输出更多或更多的命令 精心挑选的地位 关键点的信息 程序流程,观察 信息并推断出什么是错的 基于该信息。
- printf() debugging@everything2
其他语言的本地用户无疑通过默认的print / log /或trace命令引用它们所选择的编码平台,但我听说过“printf()”名称用来引用这种技术除了C以外的许多语言。也许这是由于它的历史:虽然BASIC和FORTRAN具有基本但可维护的PRINT
命令,但C通常需要更多的工作来格式化各种数据类型:printf()
是(和通常仍然是到目前为止为此目的最方便的方法,提供了许多内置的格式化选项。它的堂兄fprintf()
接受另一个参数,即要写入的流:这允许小心的“调试器”将诊断信息定向到stderr
(可能自身重定向到日志文件),同时保留输出程序没有损坏。
虽然现代调试软件的用户经常看不起,但printf()调试仍然证明自己是不可或缺的:用于Firefox网络浏览器的广受欢迎的FireBug工具(以及现在可用于其他浏览器的类似工具)是围绕控制台构建的网页脚本可以记录错误的窗口或包含格式化数据的诊断消息。
答案 1 :(得分:33)
我听说它叫做穴居人调试
答案 2 :(得分:24)
我认为以下引用是适当的:
“最有效的调试工具仍然需要仔细考虑,再加上明智的打印声明。”
答案 3 :(得分:18)
我称之为追踪。
答案 4 :(得分:6)
我和我的队友称之为“老派调试”。
答案 5 :(得分:6)
调整裤子的位置:)
当你在嵌入式系统上时,当你处于最前沿时,你所编写的语言还没有调试器,当你的调试器表现得很奇怪而且你想要恢复一些理智时,并且您想要了解多线程代码中的重入是如何工作的,....
答案 6 :(得分:5)
与exploratory programming的意义相同,我喜欢称之为探索性调试。当调试器的功能不足以检查程序中的复杂类型,或单独调用辅助函数,或者您只是不了解直接使用所述功能的错误时,就会发生这种情况。
答案 7 :(得分:5)
我称之为“嗨,妈妈”编程。
答案 8 :(得分:4)
我会简单地称之为“记录”。
答案 9 :(得分:4)
为了纪念the guy who invented the printing press,我听说“正在使用 Gutenberg调试”。
答案 10 :(得分:4)
我嵌入式系统通常是检测代码的唯一方法。不幸的是,打印需要时间并影响系统的实时流程。因此,我们还通过“跟踪”进行检测,其中有关系统状态(函数入口退出等)的信息被写入内部缓冲区以便稍后转储和解析。真正的嵌入式程序员可以通过闪烁LED进行调试;)
答案 11 :(得分:4)
我也从VB人群中听到了“MessageBox调试”这个术语来引用'调试'的'风格'。
答案 12 :(得分:2)
经典调试
答案 13 :(得分:2)
此外,在.Net中,您可以添加调试语句(我认为它实际上是Debug.WriteLine)以输出到控制台。这些语句仅包含在调试版本中 - 编译器会在您执行发布版本时自动将它们遗漏。
答案 14 :(得分:2)
我通常将其称为追踪。
请注意,在Visual Studio中,您可以设置仅添加跟踪的断点。右键单击断点,选择“击中时......”并选中“打印消息”选项。
答案 15 :(得分:1)
详细调试!
答案 16 :(得分:1)
(良好的日志记录对于调试运行生产系统中的问题非常有价值。许多无用的详细打印语句不是,但是当重要或意外发生时记录一些有趣的东西非常重要。如果你知道如何调试的唯一方法问题在于调试器,如果您为某些用户破坏了您构建的服务但是您无法在本地重现该问题,那么您将发现自己处于相当紧张的位置。)
答案 17 :(得分:1)
我总是用“快速和脏调试”这个词来形容它,或者简称为“脏调试”。
答案 18 :(得分:1)
手动断言?调试器恐惧症?