这可能类似于这里的一个问题:What's the purpose of the UD2 opcode in the Linux kernel?但是,我在OSX上得到这个而不是在Linux上,并且不知道在哪里查看它是否与BUG相同(那里提到的宏。
我的OSX版本中的一些版本构建只会崩溃,这与ud2操作码有关,并且想知道什么会导致clang生成它们。这是一个例子:
COMMON_UI::BackProject3DPosition(UTILITYLIB::TVECTOR<float, 3u> const&, UTILITYLIB::TVECTOR<float, 3u> const&) const:
0x1e0705c: pushl %ebp
0x1e0705d: movl %esp, %ebp
0x1e0705f: ud2
0x1e07061: nop
这只发生在-O2,而不是-O1,所以看起来好像很容易出错。
非常感谢任何帮助。
答案 0 :(得分:1)
我不是100%确定clang
,但gcc
有时会插入ud2
来标记代码区域,这些代码区域会显示未定义的行为,因此不应该执行。但是,它会在这种情况下发出警告。
所以我怀疑编译器会发出一些忽略或抑制的警告。尝试将-Wall -Werror
添加到命令行。