标签: sigbus

总线错误与分段故障

总线错误和分段错误之间的区别?是否会发生程序发出seg故障并第一次停止并且第二次发生总线错误并退出?

c segmentation-fault bus-error sigbus

37
推荐指数
4
解决办法
3万
查看次数

在x86 Linux上调试SIGBUS

在Linux中的通用x86用户态应用程序上会导致SIGBUS(总线错误)的原因是什么?我在网上找到的所有讨论都是关于内存对齐错误,根据我的理解,它并不适用于x86.

(我的代码在Geode上运行,以防有任何相关的处理器特定怪癖.)

linux debugging bus-error sigbus

18
推荐指数
6
解决办法
3万
查看次数

Android致命信号7(SIGBUS)

我得到了一些SIGBUS(7)和SIGSEGV(11)崩溃,我很难跟踪.

似乎导致崩溃的线程主要用于加载要显示的图像,这是有意义的,因为日志表明SkJPEGImageDecoder出现故障.

Bitmaps按照本指南重新使用内存

它可能与此有关吗?

LogCat输出:

05-20 13:46:09.775: A/libc(419): Fatal signal 7 (SIGBUS) at 0x0000001e (code=1), thread 520 (ImageLoaderExec)
05-20 13:46:09.875: I/DEBUG(172): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-20 13:46:09.875: I/DEBUG(172): Build fingerprint: 'google/occam/mako:4.4.2/KOT49H/937116:user/release-keys'
05-20 13:46:09.875: I/DEBUG(172): Revision: '11'
05-20 13:46:09.875: I/DEBUG(172): pid: 419, tid: 520, name: ImageLoaderExec  >>> com.package.name <<<
05-20 13:46:09.875: I/DEBUG(172): signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0000001e
05-20 13:46:09.975: I/DEBUG(172):     r0 …
Run Code Online (Sandbox Code Playgroud)

java android segmentation-fault sigbus

10
推荐指数
1
解决办法
2万
查看次数

当尝试在 Netbeans 上运行 JavaFx 项目时,为什么我在 MacOS 上不断收到此 SIGBUS 错误代码?

每当我尝试运行 JavaFX 问题时,我都会遇到 MacOS 错误,我的代码在其他设备上运行良好,所以我不确定出了什么问题。

我使用的是 M1 mac,带有 Java 17 和 JavaFX 最新版本。运行 JavaFX 应用程序时,它会打开 GUI 1 秒或 30 秒,然后崩溃并吐出提供的错误。任何帮助将不胜感激,如果您有其他问题或需要更多信息 lmk。

我相信这是 /private/TMP 文件夹或我在网上看到的内容的问题,但我可能完全错误,因为该文件夹现在基本上是空的,所以我看不到它已满或其他什么。

如果有人可以提供帮助或有任何想法,我将非常感谢一些反馈。

A fatal error has been detected by the Java Runtime Environment:
SIGBUS (0xa) at pc=0x000000010c0314f0, pid=1056, tid=28943

JRE version: Java(TM) SE Runtime Environment (17.0.1+12) (build 17.0.1+12-LTS-39)
Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0.1+12-LTS-39, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64)
Problematic frame:
v  ~StubRoutines::SafeFetchN

No core dump will be …
Run Code Online (Sandbox Code Playgroud)

java macos javafx sigbus

10
推荐指数
1
解决办法
1700
查看次数

Apache崩溃报告 - is_closing_session():环境中没有DBUS_SESSION_BUS_ADDRESS

我注意到我的系统一直在制作这个崩溃报告.我不确定为什么,我对阿帕奇内心的了解有限.我不确定是什么导致了这个,因为服务器上没有任何特别的变化.任何帮助表示赞赏.我应该寻找和检查什么?可能是什么原因造成的?

Apport会:

ERROR: apport (pid 8618) Mon Jan 25 14:35:24 2016: called for pid 8384, signal 7, core limit 0
ERROR: apport (pid 8618) Mon Jan 25 14:35:24 2016: executable: /usr/sbin/apache2 (command line "/usr/sbin/apache2 -k start")
ERROR: apport (pid 8618) Mon Jan 25 14:35:24 2016: is_closing_session(): no DBUS_SESSION_BUS_ADDRESS in environment
ERROR: apport (pid 8618) Mon Jan 25 14:35:52 2016: wrote report /var/crash/_usr_sbin_apache2.0.crash
Run Code Online (Sandbox Code Playgroud)

_usr_sbin_apache2.0.crashProblemType: 崩溃报告 - 对于stackoverflow来说很大

谢谢你的时间=)

php apache crash sigbus

8
推荐指数
1
解决办法
1639
查看次数

为什么对内存映射零字节文件的读操作会导致SIGBUS?

这是我写的示例代码.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

int main()
{
    int fd;
    long pagesize;
    char *data;

    if ((fd = open("foo.txt", O_RDONLY)) == -1) {
        perror("open");
        return 1;
    }

    pagesize = sysconf(_SC_PAGESIZE);
    printf("pagesize: %ld\n", pagesize);

    data = mmap(NULL, pagesize, PROT_READ, MAP_SHARED, fd, 0);
    printf("data: %p\n", data);
    if (data == (void *) -1) {
        perror("mmap");
        return 1;
    }

    printf("%d\n", data[0]);
    printf("%d\n", data[1]);
    printf("%d\n", data[2]);
    printf("%d\n", data[4096]);
    printf("%d\n", data[4097]);
    printf("%d\n", data[4098]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我向该程序提供零字节foo.txt,它将以SIGBUS终止.

$ > foo.txt && …
Run Code Online (Sandbox Code Playgroud)

c mmap sigbus

8
推荐指数
1
解决办法
634
查看次数

“地址未对齐错误”是什么意思?

首先 - 抱歉具体细节。我通常尝试将我的 SO 问题归结为仅包含相关内容的通用“A 类”内容,但我不确定这里问题的根源是什么。

我有一个看起来像这样的矩阵类模板(只显示我认为的相关部分):

template <std::size_t R, std::size_t C>
class Matrix
{
private:
    //const int rows, cols;
    std::array<std::array<float,C>,R> m;
public:
    inline std::array<float,C>& operator[](const int i)
    {
        return m[i];
    }

    const std::array<float,C> operator[](const int i) const
    {
        return m[i];
    }

    template<std::size_t N>
    Matrix<R,N> operator *(const Matrix<C,N> a) const
    {
        Matrix<R,N> result = Matrix<R,N>();
        // irrelevant calculation
        return result;
    }
    // ... other very similar stuff, I'm not sure that it's relevant
}

template <std::size_t S>
Matrix<S,S> identity()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ sigbus

6
推荐指数
1
解决办法
2万
查看次数

如何理解这次崩溃?:SIGBUS BUS_ADRALN

多数民众赞成在堆栈跟踪,我不明白这个错误:

0   CoreFoundation  0x30f57648 ___CFBasicHashFindBucket_Linear_NoCollision + 92  
1   CoreFoundation  0x30f59688 __CFBasicHashAddValue + 692
2   CoreFoundation  0x30eaff9f CFDictionarySetValue + 74
3   UIKit   0x35721a0b -[UITouchesEvent _gestureRecognizersForWindow:] + 282
4   UIKit   0x357215d5 -[UIWindow _sendGesturesForEvent:] + 28
5   UIKit   0x357214ab -[UIWindow sendEvent:] + 66
6   UIKit   0x3570a313 -[UIApplication sendEvent:] + 298
7   UIKit   0x35709c53 _UIApplicationHandleEvent + 5090
8   GraphicsServices    0x31a11e77 PurpleEventCallback + 666
9   CoreFoundation  0x30f1ba97     __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26
10  CoreFoundation  0x30f1d83f __CFRunLoopDoSource1 + 166
11  CoreFoundation  0x30f1e60d __CFRunLoopRun + 520
12  CoreFoundation  0x30eaeec3 …
Run Code Online (Sandbox Code Playgroud)

crash crash-reports sigbus ios

5
推荐指数
1
解决办法
3564
查看次数

我可以排除SIGBUS是由于“小页面错误”引起的吗?(内核日志没有分配失败)

动机

我正在尝试提高对Xwayland中SIGBUS错误的理解。自2018年2月20日左右以来,使用Fedora Linux的Xwayland 1.19.6-5.fc27.x86_64Linux内核已被多个Fedora Linux用户所见4.15.3-300.fc27.x86-64

遗憾的是,我没有内核“ segfault”日志消息(或SIGBUS等效消息)。Xwayland有一些毫无意义的代码,可以捕获致命信号。但是我可以siginfo通过调试coredump 看到,这似乎差不多。

定义

我了解当虚拟内存的页面在RAM中不可用并且必须从磁盘读取时会发生“主要页面错误”。我想我对ext4文件系统支持的页面特别感兴趣(例如,不能直接访问块设备)。

因此,当不需要磁盘访问时就是“较小的页面错误”。我认为差异是相当明确的,因为Linux公开了主要和次要页面错误的计数器。

我的问题

如果内核发送了一个SIGBUS程序,我想知道我是否通常应该认为这将是主要的页面错误。

根据核心转储和反汇编,程序在接收到SIGBUS时正在读取内存,而不是对其进行写入。中的错误地址在siginfo->si_addr映射的系统可执行文件内,该文件不能由用户写入,并且该地址似乎在当前文件长度的范围内。实际上,在调试coredump时,我已经从内存地址中读取了非常令人信服的值。似乎coredump生成过程阅读此地址没有困难:-(。

我也对排除“无效的地址对齐”情况(BUS_ADRALN)很有信心,因为siginfo->si_code是2,即BUS_ADRERR,“不存在的物理地址”。同样是因为我使用的是x86,在大多数情况下它允许未对齐的访问,并且陷阱不在任何SSE扩展指令中。

我考虑了内核在处理确定为“次要”的页面错误时通常负责的工作。我想小故障可能无法分配内存,从而引发SIGBUS。但是,我相信我会注意到这样的分配失败:

我有很多免费的交换操作可以将用户页面逐出,并且我没有注意到系统开始交换时通常发生的明显减速。崩溃发生在笔记本电脑从挂起状态变为ram状态后几秒钟,即使以约100MB / s的速度也不足以填充8GB的交换空间。我也没有看到可怕的内存不足(OOM)杀手出现在内核日志中,就像我期望的那样,如果内核未能成功分配页面框架或页面表。

还有其他可能性,一个轻微的页面错误可能会失败并导致SIGBUS?即,当在内核日志中查找错误时,有一些我不会注意到的原因吗?哪些会很快发作?

同样,多个核心转储将其显示为页面错误,这是通过从文件系统上的映射文件读取而触发的。

别有用心

我真的很想念一个小页面错误的情况。因为这令人恐惧的另一面是,我不明白这种SIGBUS可能是由硬页面错误方面引起的。从几个月前开始,我们中的一些用户有非常相似的错误。我的内核日志中没有IO错误。在正常操作期间,读取指示的文件时没有IO错误。运行rpm --verify --all或在HDD上运行扩展的SMART测试时,我没有任何错误。不幸的是,我似乎很少有嫌疑犯。在最近的怀疑我有一个内核升级,显然我想排除它;日期并不能完全证明这一点,但是还不能完全排除。日期最近的是今年的微代码更新。这似乎更难确定。

轻微页面错误的已知原因

  1. 从逻辑上讲,当实现MAP_PRIVATE映射的写时复制时,听起来好像发生了轻微的页面错误。
  2. 它还应该包括/ dev / zero或MAP_ANONYMOUS上的读取错误,假设内核没有它们实现为读取共享的零页,并且没有实现为立即为整个映射分配页的实现。
  3. 但更一般而言,它可以是对页面的任何首次访问。这是因为似乎通常是按需填充用于内存映射的页表。(这将由页面错误来完成,并且如果文件页面已经在高速缓存中,则只会是次要的页面错误)。

    MAP_NONBLOCK(自Linux 2.5.46起)

    该标志仅与MAP_POPULATE结合使用才有意义。不要执行预读:仅为RAM中已经存在的页面创建页表条目。从Linux 2.6.23开始,此标志导致MAP_POPULATE不执行任何操作。有一天,combinina?可以重新实现MAP_POPULATE和MAP_NONBLOCK的功能。


编辑:详细摘录以上的进一步摘录

评论者要求提供更具体的细节,以澄清错误的地址和说明。初始链接https://bugzilla.redhat.com/show_bug.cgi?id=1557682中有很多节选

故障根据错误链接中的描述而变化。这是最近事例的摘录。

$ gdb 2018-03-21.core
...
Core was generated by `/usr/bin/Xwayland :0 -rootless …
Run Code Online (Sandbox Code Playgroud)

c linux x86-64 sigbus

5
推荐指数
1
解决办法
371
查看次数

mmap不存在物理地址错误

我正在尝试mmap一个文件,它似乎成功但是当我访问它时,我收到一个SIGBUS错误.码:

int main(int argc, char* argv[]) {
int pid = getpid();
char cmd [1024];
int file;
if (argc != 2) {
    printf("Wrong arguments\n");
    return 1;
}
printf("%s", argv[1]);
int numpages = atoi(argv[1]);
sprintf(cmd, "cat /proc/%d/maps", pid);
system(cmd);
long page_size = sysconf(_SC_PAGESIZE);
file = open(argv[1], O_RDWR, (mode_t)0600);
ftruncate(file, page_size  * numpages);
if(file == -1) {
    perror("file open failed!\n");
    return 1;
}
printf("\n\n mapping file - numpages: %d \n\n", numpages);
printf("mapping %ld KB\n", page_size  * numpages/1024);
int* mapped_file = mmap(0, page_size  * …
Run Code Online (Sandbox Code Playgroud)

c mmap sigbus

3
推荐指数
1
解决办法
3578
查看次数

Linux中的结构分配在ARM中失败但在x86中成功

我注意到一些非常奇怪的东西.说我已经定义了以下结构

typedef struct
{
  uint32_t a;
  uint16_t b;
  uint32_t c;
} foo;
Run Code Online (Sandbox Code Playgroud)

这个结构包含在我从网络接收的大缓冲区中.

以下代码适用于x86,但我SIGBUS在ARM上收到.

extern void * buffer;
foo my_foo;
my_foo = (( foo * ) buffer)[0];
Run Code Online (Sandbox Code Playgroud)

用memcpy替换解除引用的指针解决了这个问题.

在ARM中搜索SIGBUS时,我发现这与内存对齐somwhow有关.

有人可以解释发生了什么吗?

c linux arm memory-alignment sigbus

3
推荐指数
1
解决办法
1556
查看次数