c - 教育示例表明有时 printf 作为调试可能会隐藏错误

标签 c debugging segmentation-fault printf-debugging

我记得当我在上一些 C 编程类(class)时,一位老师曾经建议我使用 printf 来观察我试图调试的程序的执行情况。这个程序有一个段错误,我现在不记得原因了。我听从了他的建议,段错误消失了。幸运的是,一个聪明的 TA 告诉我调试而不是使用 printfs。在这种情况下,这是一件很有用的事情。

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

问题:你们中有人也遇到过这种行为吗?我怎样才能重现这样的东西?

编辑:

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

最佳答案

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

所以使用 printf 语句确实有正当理由。是 debug 还是 printf 应该根据具体情况来决定。请注意,无论如何这两者并不排斥 - 您可以调试代码,即使它包含 printf 调用 :-)

关于c - 教育示例表明有时 printf 作为调试可能会隐藏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3110711/

相关文章:

debugging - 可以访问chrome.devtools API调试Chrome扩展程序

java - Eclipse快捷方式从当前暂停的线程切换到其他暂停的线程

c - 读取文件时出现段错误

c - 段错误何时发生?

c - 数组转换的错误结果

c - 如何计算C中两个矩阵之间的距离

c - 为什么这个声明有意想不到的副作用?

c++ - 较高 n 值的段错误(例如 n=999997)

c - 找到下面程序 : 复杂度的严格上限

c - 如何使用 C 中的符号分隔的 sscanf 读取整数?