当前位置:  技术问答>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/

相当有用,不放试试看

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 信号处理中的SIGBUS


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3