在Linux的通用x86用户态应用程序上,什么会导致SIGBUS(总线错误)?我在网上可以找到的所有讨论都与内存对齐错误有关,据我了解,这实际上并不适用于x86。
(我的代码在Geode上运行,以防那里存在任何相关的特定于处理器的怪癖。)
如果打开未对齐的访问陷阱,则可以从未对齐的访问中获取SIGBUS,但是通常在x86上是关闭的。如果出现某种错误,也可以通过访问内存映射的设备来获取它。
最好的选择是使用调试器来识别错误的指令(SIGBUS是同步的),并尝试查看其意图。