gcc趣闻ud2a指令

昨天我们的游服在测试环境下突然崩溃,gdb corefile显示错误signal 4 - Illegal instruction
QQ截图20131218093404

这个错误有别于经常遇到的段错误,它不是由内存越界造成的,而是CPU的指令非法。CPU怎么会非法指令呢?立刻查看gdb的反汇编,
看到出错那行赫然写着ud2a(见下图),ud2a这是什么指令,闻所未闻,gcc怎么会生成ud2a指令呢???
QQ截图20131218095221
求助谷歌才知道ud2a是intel cpu的一个保留指令,没有定义,一般被编译器用来提示错误。游服产生这个错误的原因是程序员把std::string printf出来时漏了向c字符串的转换(.c_str())

printf("%s", str.c_str());

被打成了

printf("%s", str);

gcc发现了这个错误,在编译的时候在这里插入了ud2a指令,防止错误蔓延。可是gcc为什么不在编译时直接报错而要这个样子呢?求解释!

Comments

Popular posts from this blog

socket close shutdown函数区别

批量在文件头插入

hash表取模技巧