今天我们遇到了一个不寻常的现象,同事在他的代码中调用了一个通常表现良好的函数,但却触发了libc(gethostbyname)的segfault。令人困惑的是,在相同的运行时中,其他源文件中同样的函数可以正常工作而没有问题。令人惊讶的是,在使用valgrind时,segfault消失了,实际上,它与valgrind一起完美地工作,没有报告任何错误。
经过我们许多向编译器神灵献祭的努力,我们最终意识到调用该函数的源文件缺少声明该函数的头文件。一旦我们添加了它,一切都正常运行。
为什么gcc / ld没有生成指示未识别该函数的错误(甚至警告)?为什么它在valgrind下工作?
谢谢。
经过我们许多向编译器神灵献祭的努力,我们最终意识到调用该函数的源文件缺少声明该函数的头文件。一旦我们添加了它,一切都正常运行。
为什么gcc / ld没有生成指示未识别该函数的错误(甚至警告)?为什么它在valgrind下工作?
谢谢。