当前位置: 技术问答>linux和unix
SIGBUS的问题
来源: 互联网 发布时间:2015-05-28
本文导语: 在HPUX下面,运行一程序,隔几分钟就收到SIGBUS,程序退出,请教一下,SIGBUS是一个什么样的信号?什么情况下会产生?我用的编译器是cc,当我用gdb查看core时,错误是不知所云,甚至把注释都当成了出错的地方了,...
在HPUX下面,运行一程序,隔几分钟就收到SIGBUS,程序退出,请教一下,SIGBUS是一个什么样的信号?什么情况下会产生?我用的编译器是cc,当我用gdb查看core时,错误是不知所云,甚至把注释都当成了出错的地方了,何解?
|
以我所记忆的情况,SIGBUS的主要原因是对齐方式的问题,举个例子,一个(int * )指针指向int型数据,一半默认CPU对待int是要对齐的,也就是说起始地址是4的倍数,如果一个int *指向了非4倍数的地址,引用内容的时候就容易出现SIGBUS,你试一下吧,不过这是从一本书上看得,但是我在我的机器上用Linux好像也没有出错,不知道是怎么回事。
|
CoolQ说的对,一般是这个原因。不过这个问题的出现与否跟编译器有关,也就是说编译器生成的代码在访问这样的内存时的处理是否正确。gcc没有这个问题,这就是你的linux没有这个问题的原因。楼主可以换gcc看看,如果问题不出现了,那就是字节对齐问题了。
|
SIGBUS本意是指总线错误,一般出现在当你访问一段非法地址,并且这段地址物理上是不存在的。它类似于SIGSEGV,后者也是访问非法地址,但是这个地址是虚拟地址空间的地址,SIGBUS正好相反,由于某些机器上,物理空间存在不连续的情况,访问到这些hole时,就会产生这个信号。硬件故障。
|
The only way you can use is gdb, do not use -g option, try to see the asm code or it will cause errors as you mentioned above. you will find the error pointer usage.
|
hp为了稳定,要求很严格啊。楼主在仔细规范一下自己的程序吧
|
在linux上,访问非对齐的地质应该是产生一个非对齐的访问异常吧,当某个寄存器中的AC(Alignment Check)位置上后才会产生,然后你通常会在屏幕上,或者dmesg中看到内河的警告信息……:)
|
应该是对齐啊,没有core dump吗?分析一下试试看
|
还有一个办法,用Valgrind,
http://valgrind.kde.org/
相当有用,不放试试看
http://valgrind.kde.org/
相当有用,不放试试看
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。