通过添加“打印”语句进行debugging的正确名称是什么?
debugging有很多种方法,使用debugging器是一种方法,但简单的懒惰的程序员只需要在代码中添加一些打印语句即可。
即
def foo(x): print 'Hey wow, we got to foo!', x ... print 'foo is returning:', bar return bar
这种debugging方式有没有适当的名称?
是的 – 它被称为printf()
debugging ,以无处不在的C函数命名:
用于描述通过在程序stream程中的关键点插入输出或多或less精心select的状态信息的命令来描述debugging工作,观察该信息并基于该信息推断出什么是错误的。
– printf()debugging@ everything2
其他语言的本地用户毫无疑问地使用默认的print / log / trace命令来引用它的编码平台,但是我听说过用“printf()”这个名字来引用其他语言的其他语言也许这是由于它的历史原因:BASIC和FORTRAN具有基本的但是可用的PRINT
命令,C通常需要更多的工作来格式化各种数据types: printf()
是(并且通常仍然是)最方便的意味着为此提供了许多内置的格式化选项。 它的堂兄fprintf()
采用了另一个参数,要写入的stream:这样可以让一个小心的“debugging器”将诊断信息指向stderr
(可能本身redirect到日志文件),同时保持程序的输出不被破坏。
尽pipe经常被现代debugging软件的用户所忽视,但printf()debugging仍然certificate自己是必不可less的:用于Firefox浏览器的广受欢迎的FireBug工具(现在可用于其他浏览器的类似工具)围绕控制台窗口构build网页脚本可以logging包含格式化数据的错误或诊断消息。
我认为以下引用是合适的:
“最有效的debugging工具还是要仔细考虑,再加上明智的打印语句。”
- Brian Kernighan,“Unix for Beginners”(1979)
我听说过穴居人debugging
我称之为追踪。
我和我的队友称它为“老校园debugging”。
就像探索性编程一样 ,我喜欢称之为探索性debugging 。 当debugging器的function不足以检查程序中的复杂types,或者单独调用助手函数,或者对于直接使用这些特性的bug不够了解时,就会出现这种情况。
你的裤子座位debugging 🙂
当你在一个embedded式系统上时,当你处于最尖端的状态时,你所编写的语言还没有一个debugging器,当你的debugging器行为exception,你想恢复一些理智,你想了解multithreading代码中的重入是如何工作的….
我也从VB群中听说过“MessageBoxdebugging”一词来指代这种“debugging”的“样式”。
我embedded式系统通常是testing代码的唯一方法。 不幸的是打印花费时间并影响系统的实时stream程。 所以我们还通过“跟踪”来检测系统状态(函数入口出口等)的信息是否写入内部缓冲区,以便稍后转储和parsing。 真正的embedded式程序员可以通过闪烁LED来进行debugging;)
我称之为“嗨,妈妈”编程。
我通常把它称为跟踪。
请注意,在Visual Studio中,您可以设置只添加跟踪的断点。 右键点击一个断点,select“什么时候打…”并选中“打印一条消息”选项。
另外,在.Net中,你可以添加debugging语句(我认为它实际上是Debug.WriteLine)输出到控制台。 这些语句只包含在debugging版本中 – 编译器会在您进行版本构build时自动将其忽略。
经典debugging
我会简单地称之为“ 日志logging ”。
手动断言? debugging器恐惧症?
详细debugging!
(良好的日志logging对于debugging运行中的生产系统中的问题是非常有价值的,很多无用的冗长的打印语句不是很重要,但是当某些重要或意外事件发生时logging一些有趣的事情是非常重要的。一个debugging器,当你为你的一些用户build立的服务被破坏时,你会发现自己处于一个非常紧张的状态,但你不能在本地重现问题。)
我一直以“quick-and-dirty debugging”这个术语来称呼它,或者简称“脏debugging”。
我听说“ 古腾堡debugging ”被用来为发明印刷机的人颁奖 。