问题标签 [sigbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
310 浏览

java - 从 C++ 诊断与 JNI 一起使用的第三方 jar 中的 SIGBUS

我将 CLion 与一个 c++ 项目 (cmake) 一起使用,该项目启动一个 jvm。java部分是用gradle构建的。该项目有效,但我在调试时遇到问题。

当我启动 JVM 时,我立即得到一个 SIGSEGV。我知道这是正常的,除了忽略 SIGSEGV 之外没有其他解决方法。有点烦人但还不错,因为每次会话只发生一次。

但是,在那之后,我继续调试,我得到了持续的 SIGBUS 信号。

它并没有在我的代码中停止。除了忽略所有 SIGBUS 之外,我不明白为什么会发生这种情况,或者是否有可能避免它们。

我最小化了我的代码并创建了最简单的示例来重现该问题。基本上,我创建了一个 cpp 项目,它以org/junit/platform/console/ConsoleLauncher作为主要(junit5)启动一个 jni,这使得一个简单的测试。SIGBUS 发生了。它发生在我的测试甚至运行之前。

我怀疑 JUnit 中的某些东西,但不确定。有什么办法可以找到根本原因?

复制示例项目在这里:https ://github.com/tallavi/sigbus-reproduction

如果我运行它,你可以看到代码在调用 java 部分后停止运行,没有“调用后”,没有“CppMainEnd”:

如果我只是将 main 从 JUnit5 更改为我的 main 并运行相同的代码,一切正常:

我按照@Oo.oO 的建议处理了信号,但它当然不能解决问题。Java 代码完成,但如果我尝试访问该 JVM,例如,销毁它,它就会挂起!: 挂起的堆栈跟踪

但是,如果我让它运行(而不是尝试调试它),它会因不同的错误而崩溃:

有了这个跟踪:

处理信号后销毁jvm时

请注意,SIGBUS 并不总是发生,但 JVM 调用之后的代码 100% 的时间停止运行。

希望这对任何人都有意义..

更新:这是它在 lldb 中的外观:

0 投票
1 回答
160 浏览

c - 访问mmap地址时,收到信号SIGBUS

当我试图访问返回的地址 mmap 时,发生了总线错误。

我的代码如下:

shared_size == 256*1024*1024

shared_start == 401000000000(我使用了标志 MAP_FIXED)

将文件 ftruncate 到 256M。

调用mmap没有错,并不是所有的地址范围都不允许访问。从下面的gdb信息可以看出,地址0x40100f11ff00是不允许的,但是地址0x40100fe00000是允许的:

从下面的maps信息可以看出我上面访问的地址都在mmap地址范围内:

但是,在写入这些不可访问的地址时,会发生总线错误:程序收到信号 SIGBUS,总线错误。

PS.当将shared_size从256M减少到128M时,没有问题。

0 投票
1 回答
39 浏览

c - TTF_RenderText_Solid 导致 SIGBUS

我有这段代码,它应该使用 SDL2_ttf 加载字体并将文本绘制到屏幕上:

结构声明:

文本渲染头:

主要:

但每当我尝试调用SL_setTextString(SL_Text* text, const char* string)函数时,它都会给我 SIGBUS。它出现就行了SDL_Surface* surface = TTF_RenderText_Solid(text->font->font, text->text, text->color)

GDB 回溯:

顺便说一下,非常感谢您列出常见的 SIGBUS 原因。

0 投票
0 回答
1533 浏览

go - 在 CI 上运行 go test 时 SIGBUS 错误代码 = 0x2

我不确定什么是解释这一点的最佳方法,但我们经常观察到我们的 CI 因 SIGBUS 问题而失败。这个错误看起来都是 Go 内部的,我们一无所知。

我们已经在本地机器上多次运行测试用例以尝试解决错误。但是每次我们的测试通过时,我们都看不到 SIGBUS 问题。

它只发生在我们 CI 盒子上的随机测试文件上。

相关的堆栈跟踪:

注意:本地盒子是 MACOS,我们使用的 CI 由无人机驱动,我们使用golang:1.13图像来运行我们所有的测试,所以我的假设是linux/amd64

在本地通过MACOS和使用drone exec,并且测试不会导致在 CI 服务器上经常发生的 SIGBUS 错误。

0 投票
0 回答
292 浏览

android - 信号 7 (SIGBUS),代码 1 (BUS_ADRALN) - 如何调试

我有一个奇怪的崩溃——崩溃几乎只在三星 Galaxy Tab A(带 S Pen)设备上重现,在发布版本上。

堆栈跟踪非常短,仅包含两个相关行 - /lib/arm/my-jni.so (my_func_loop+1662) /lib/arm/my-jni.so (first_function+694)

我使用 addr2line 检查了这些行,但我认为问题并不存在。这可能是其他地方的内存问题。那么我该如何调试呢?我没有关于问题出在哪里的任何信息,那么有没有办法发布带有一些额外标志的版本,这将有助于捕捉有问题的位置?例如,GCC 有一个消毒剂可以帮助捕捉这些错误。

0 投票
1 回答
153 浏览

fortran - 当 fortran 代码读取 linux 集群上的文件时发生 SIGBUS

当我使用 mpirun 在 linux 集群上并行运行我的 fortran 代码时,出现 sigbus 错误。读取文件时出现,时间不规律,有时继续无误。我已经尝试过调试编译选项,如 -g,但我没有得到任何关于错误来自哪一行的信息。实际上,代码之前在三个不同的集群中执行过,没有出现这个错误,但这个错误只发生在这台机器上。我个人怀疑这与机器的性能(尤其是存储 i/o)有关,但我不确定。

程序代码很简单。mpirun 执行的每个进程都会读取与其等级对应的文件,如下所示。

我使用了 191 个 cpu,它加载的 191 个文件的总大小约为 11 GB。

用于执行的集群由 24 个节点组成,每个节点有 16 个 cpu(总共 384 个 cpu),并使用与另一个集群共享的公共存储。我通过将节点 1 到 12 指定为主机文件来并行运行代码。

最初,我有 191 个 CPU 无序地同时读取所有文件。这样做之后,程序以 sigbus 错误结束。此外,对于某些节点,ssh 连接被延迟,并且节点无法找到 bashrc 文件并出现 stale file handle 错误。陈旧的文件句柄错误稍等片刻,它似乎自行恢复,但我不确定系统管理员做了什么。因此,我将其更改为以下代码,以便一次只有一个 cpu 可以读取文件。

这对于单次执行似乎工作正常,但如果我同时运行多个这些程序,第一个 mpirun 停止并且最终都以 sigbus 错误结束。

我的下一个尝试是通过在读取数组时删除 do 语句来最小化 read 语句的执行。但是,由于时间有限,我无法测试此修改的有效性。

以下是一些附加信息。

  • 如果我在运行并行程序时使用 nautilus 等资源管理器执行搜索或复制文件,则 nautilus 没有响应或正在运行的程序引发 sigbus。在严重的情况下,我无法连接具有陈旧文件句柄错误的 VNC 服务器。
  • 我使用 OpenMPI 2.1.1、GNU Fortran 4.9.4。我使用以下 $OPENMPIHOME/bin/mpif90 -mcmodel=large -fmax-stack-var-size-64 -cpp -O3 $SOURCE -o $EXE 编译程序我在 gnome 终端 $OPENMPIHOME/bin/ 中执行以下程序mpirun -np $NP -x $LD_LIBRARY_PATH --hostfile $HOSTFILE $EXE
  • 据说该集群可以毫无问题地运行 FLUENT 等商业软件。

综上所述,我个人的怀疑是我的代码产生了过多的磁盘I/O导致集群的存储被卸载了,但是我不知道这是否有意义,因为我没有集群知识。如果是,我想知道是否有一种方法可以最小化磁盘 I/O,是否足以继续上面提到的矢量化 I/O,或者是否有额外的部分。如果您能告诉我有关此问题的任何信息,我将不胜感激。提前致谢。

!!!我写了一个示例代码。如上所述,可能不容易重现,因为发生情况因机器而异。

我有 32 000.DAT ~ 031.DAT

正如预期的那样,我从终端得到了“好”的输出文本,但是有问题的机器在运行 busread 时因 sigbus 错误而终止。

0 投票
0 回答
56 浏览

macos - 来自 x86_64 程序集匿名函数的总线错误

我正在编写一个针对 x86_64 的 Lisp 编译器。我目前的目标是实现特殊形式lambda。我最近发现您可以获取标签的地址,将其存储在寄存器中,然后从中调用它:

凉爽的!这有很大的潜力。但是我在做的测试中遇到了一个错误:

当我给我的编译器这个时,

它产生了这个。

起初这似乎没问题。运行时出现总线错误:

嗯!诡异的。接下来我通过 LLDB 运行它:

它说它在这里失败了,

但我在我的代码中没有看到这样的行。我完全糊涂了。有谁知道这里发生了什么,为什么我会遇到总线错误,以及我需要调整什么才能使我的代码正常工作?我正在使用 Clang 在 MacOS 上进行组装。

0 投票
0 回答
22 浏览

python - 试图为“总线错误”内核获取更详细的消息

我正在努力使用部署在 Raspberry Pi 上的 python 程序,该程序使用 tshark 监控网络流量,将结果转储到已安装的 SSD 外部磁盘上的单独文件中。

我已经尝试了几乎所有可能的配置:

  • 将输出写入 SD 而不是外部 SSD 磁盘
  • 隔离进程,只捕获和写入文件的方法
  • 添加几个配置标志以设置尽可能详细

**未在单独的计算机上尝试过,因为它是远程环境,我无法更改有关硬件的任何其他内容。**不清楚是硬件出现(SD 问题?)还是软件出现https://www.wireshark.org/lists/ethereal-dev/199912/msg00027.html

尽管我尝试了所有测试,但除了“总线错误”之外,我无法设置更详细的消息,该消息在连续捕获 2、3 或 5 天后随机出现而不会中断。

问题是是否可以强制操作系统打印更详细的消息。

0 投票
1 回答
352 浏览

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

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

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

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

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