显示有时printf作为调试可能隐藏错误的教育示例

Yup*_*ing 7 c debugging segmentation-fault printf-debugging

我记得当我在某个C编程课程中时,老师曾经建议我用它printf来观察我试图调试的程序的执行情况.这个程序有一个分段错误,目前我记不住了.我听从他的建议,分段错误消失了.幸运的是,聪明的TA告诉我调试而不是使用printfs.在这种情况下,这是一件有用的事情.

所以,今天我想向某人展示使用printf可能隐藏错误,但我找不到那个有这个奇怪错误的旧代码(功能?嗯).

问题:你们有没有遇到过这种行为?我怎么能重现这样的东西?

编辑:

我看到我的问题部分将我的观点定位为"使用printf是错误的".我并不是那么说,我不喜欢采取极端的意见,所以我正在编辑一些问题.我同意这printf是一个很好的工具,但我只想重新创建一个案例,其中printfs使分段错误消失,因此,证明必须小心.

Pét*_*rök 18

有些情况下,添加printf调用会改变代码的行为,但也有一些情况下调试会执行相同的操作.最突出的例子是调试多线程代码,其中停止执行线程可能会改变程序的行为,因此您可能不会发生您正在寻找的错误.

所以使用printf语句确实有正当理由.是否调试或printf应根据具体情况决定.请注意,这两者并不是独占的 - 即使它包含调用,您也可以调试代码printf:-)

  • printf并不完美,但它比MessageBox()调试更方便,也更好. (2认同)

APr*_*mer 7

您很难说服我不要使用日志记录(并且在这种情况下printf是一种特殊的日志记录形式)来进行调试.显然要调试崩溃,首先要做的是回溯并使用purify或类似的工具,但如果原因不明显,那么日志记录是你可以使用的最好的工具之一.调试器使您可以专注于细节,日志记录可以让您了解更多.两者都很有用.