今天我们遇到了一个不寻常的现象,一位同事在他的代码中调用了一个正常行为的函数,这触发了 libc (gethostbyname) 中的段错误。令人费解的是,相同的函数在同一运行时的其他源文件中运行没有问题。令人惊讶的是,当使用 valgrind 时,segfault 消失了,事实上,它与 valgrind 完美配合,没有报告错误。
经过大量牺牲以安抚编译器之神,我们最终意识到在调用该函数的源文件中缺少声明该函数的头文件。一旦我们添加了这个,一切都正常运行。
为什么 gcc/ld 没有生成错误(甚至是警告),表明该函数未被识别?为什么它可以与 valgrind 一起使用?
谢谢。