一个面试问题.关于调试

Don*_*Lun 1 debugging

我今天被问到这个问题.

调试时,出现错误.但是在添加一个printf()行之后.没错.什么是错误可能导致这种情况.

这是一个悬而未决的问题.所以,让我说出我的想法.

我当时的答案不合逻辑.(例如,可能是一些内存错误?可能有并发问题?)那么你可能会听到什么.

有些人可能会说这不是一个好的或不是一个合理的问题.但是当我们处理面试时,我们别无选择.我们需要说出什么是合乎逻辑的,并使它成为发明.:)

cni*_*tar 5

并发问题非常有效.与其他操作相比,I/O操作printf需要很长时间,这有时会隐藏竞争条件(问题不会消失,只是表现不那么频繁 - 调试更难).

想象一下,有人想出了这个有缺陷的想法:

  • 开始一个帖子
  • 初始化将由该线程读取的一些内存位置

在这一点上,没有人知道会发生什么.如果线程启动非常快,它将在启动线程有机会写入之前读取内存位置.但是,如果新线程只是在读取变量之前打印"哦干草,我是一个新线程",它有很好的机会读取有效结果.当然,在1/10的情况下它失败,调试会很麻烦.