问题标签 [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.
java - 处理 SIGBUS 错误 ANDROID
我在 android 上运行一段代码,在 logcat 中出现以下错误。
A/libc(18317):致命信号 7 (SIGBUS),代码 1,tid 18317 (com.test.1234) 中的故障地址 0x5
我想捕捉或解决这个错误。
caffe - 训练时如何处理 caffe 中的“总线错误”?
我正在使用 NVIDIA Jetson TX1 和 caffe 根据我自己的数据训练 AlexNet。我有 104,000 个训练图像和 20,000 个验证图像输入我的模型。测试和训练的批量大小为 16。
我运行求解器进行训练,Bus error
经过 1300 次迭代后得到:
我使用 ubuntu 14、NVIDIA TegraX1、RAM 3.8 GB。据我了解,这是一个内存问题。您能否更好地解释一下并帮助我如何解决这个问题?如果需要任何其他信息,请告诉我。
c - 为什么对内存映射的零字节文件的读取操作会导致 SIGBUS?
这是我编写的示例代码。
如果我向这个程序提供一个零字节的 foo.txt,它会以 SIGBUS 终止。
如果我向这个程序提供一个字节的 foo.txt,那么就不存在这样的问题。
mmap(2)提到以下内容。
使用映射区域可能会产生以下信号:
SIGSEGV 尝试写入映射为只读的区域。
SIGBUS 试图访问与文件不对应的缓冲区部分(例如,超出文件末尾,包括另一个进程截断了文件的情况)。
因此,如果我理解正确,即使是第二个测试用例(1 字节文件)也应该导致 SIGBUS,因为data[1]
并且data[2]
正在尝试访问data
与文件不对应的缓冲区()的一部分。
你能帮我理解为什么只有一个零字节文件会导致这个程序因 SIGBUS 而失败吗?
linux - 子进程不会仅为 SIGBUS 错误生成核心并成为僵尸进程
我的子进程正在尝试访问 PCI 地址空间。它在大多数情况下都能正常工作。
但是,有时子进程会进入僵尸状态。dmesg 日志显示以下总线错误。
在这种情况下没有生成核心文件。
子进程为 SIGSEGV 错误生成核心。所以我认为它与权限/限制设置无关。
有人可以帮我理解为什么在这种情况下没有生成核心吗?
c++ - OpenGL getShaderInfoLog 总线错误 10
当我运行以下代码(或我尝试过的任何变体)时,我得到一个总线错误。它编译得很好。
我在 Mac OSX 上运行它。如果 glGetShaderInfoLog 被注释掉,它工作正常(虽然 glGetProgramInfoLog 会导致相同的错误)。这是崩溃报告中的一些重要信息。
异常类型:EXC_BAD_ACCESS (SIGBUS)
异常代码:0x000000010cd5c0f0 处的 KERN_PROTECTION_FAILURE
异常说明:EXC_CORPSE_NOTIFY
终止信号:总线错误:10
终止原因:命名空间 SIGNAL,代码 0xa
终止进程:exc 处理程序 [0]
0x10cd5c0f0 附近的 VM 区域:
--> __TEXT 000000010ccc4000-000000010cd5f000 [ 620K] rx/rwx SM=COW /Users/USER/*
__DATA 000000010cd5f000-000000010cd64000 [ 20K] rw-/rwx SM=COW /Users/USER/*
0 libsystem_platform.dylib 0x00007fffcc50fefc _platform_memmove$VARIANT$Haswell + 92
1 GLEngine 0x00007fffbbeda274 gleGetString + 52
2 GLEngine 0x00007fffbbe22d20 glGetShaderInfoLog_Exec + 141
3 程序 0x000000010cd357af 着色器::validate() + 127
4 程序 0x000000010cd35575 着色器::compile() + 1621
5 程序 0x000000010cd349ed 程序::link() + 45
6 程序 0x000000010cd3235e 对象::对象(char*, char*, char*, char*) + 222
7 程序 0x000000010cd32c65 对象::对象(char*, char*, char*, char*) + 53
8 程序 0x000000010cd2e7c0 主要 + 4576
9 libdyld.dylib 0x00007fffcc2ff255 开始 + 1
android - 服务器崩溃后尝试在套接字上调用 recv 时的 SIGBUS(Android 6.0.1)
我目前正在做一些应用程序稳定性测试,并且在调用以下方法时遇到了问题;
在这种情况下fd
是一个 TCP 套接字。当调用上面的代码并且同时套接字的服务器端以一种或另一种方式关闭时,我得到以下信号;
SIGBUS(信号SIGBUS:非法对齐)
它似乎只发生在 Android 6.0.1 上,我似乎无法“忽略”使用 SIGBUS
有没有其他人遇到过这个问题,解决这个问题的最佳方法是什么?
ios - Swift 3 面向协议的编程导致随机 SIGBUS 崩溃
我负责一个完整的 Swift 3 应用程序,经常发生的崩溃之一是SIGBUS
我完全无法理解的信号:
其背后的逻辑是在滚动视图中重用视图的逻辑,如 Apple 在 WWDC 视频中所述(找不到年份和视频......):
PageView 是一个实现 ReusableView 和 Indexed 的类:
其中 ReusableView 和 Indexed 是以这种方式定义的协议:
ReusableContentView 是管理插入或重用视图的视图。它的实现取决于包含的视图类型:
Witch 由 调用,由委托DocumentViewerViewController.reuseOrInsertPages()
触发。scrollviewDidScroll
什么能SIGBUS
在这里激起我的信号?func prepareForReuse() {}
这是我用来使协议功能可选的默认实现吗?还有其他想法吗?
当然,这次崩溃是完全随机的,我无法重现它。我刚刚从应用程序的 prod 版本收到有关它的崩溃报告。谢谢你的帮助 !
c++ - ARM中的mmap内存对齐
我正在开发一个正在移植到 ARM7 的项目(最初是在 x86 上)。它在 QNX 上运行。由于使用未对齐的指针进行读/写,我们遇到了一些内存对齐问题(SIGBUS 错误崩溃)。我一直在通过用 memcpy 替换指针转换和赋值来解决大多数对齐问题,但是这个问题我不能这样解决。
在进程之间共享一个内存池,初始化如下:
内存应该这样使用:Header
地址空间的开头有一个,后面有一个Event
数组。因此,nSize = sizeof(Header) + MAX_EVENTS * sizeof(Event)
.
Header
和都是Event
原始类型的结构。据我所知,此内存未对齐,因此这样做m_pEvents[0].m_SomeField == 3
或m_pHeader->m_SomeField = 1
可能会触发 SIGBUS 错误。这种指令无处不在,所以用 memcpy 替换每个指令将是一个真正的痛苦,我希望我能摆脱别的东西。
我发现posix_memalign
我相信哪个可以替代shm_open
or mmap
,但还不确定哪个,但这似乎也不能解决问题。一方面,我仍然收到警告。即使忽略警告,我也可以确保内存与 对齐sizeof(Header)
,但m_pEvents
不会对齐。
有没有办法在不对这个方案进行重大修改的情况下防止 SIGBUS 错误?现在编译器正在抱怨,因为"cast from 'unsigned char*' to 'Header*' increases required alignment of target type"
(有一个类似的警告Event
),但程序没有崩溃,我真的无法解释。
所以,有两个问题:1)为什么它不会崩溃?2)我如何确保它永远不会,理想情况下通过确保内存对齐并抑制警告
c - 从 mmap-ed 内存中有效读取会在负载下产生 SIGBUS。为什么?
我有一个程序可以将缓冲区复制到文件中,然后将它们映射回来,然后检查它们的内容。多个线程可以处理同一个文件。有时,我在阅读时会收到 SIGBUS,但只是在负载下。
映射是 MAP_PRIVATE 和 MAP_POPULATE。在 mmap 成功后发生通过 SIGBUS 的崩溃,由于使用了 MAP_POPULATE,我不明白。
这是一个完整的示例(在 /tmp/buf_* 下创建用零填充的文件),使用 OpenMP 创建更多负载和并发写入:
我没有断言触发,但程序总是在使用 SIGBUS 几秒钟后崩溃。
c++ - 调用堆栈显示SIGBUS,这是什么意思
我的调用堆栈显示以下内容:
这是否意味着分配失败意味着占用了太多内存?在这种情况下,如何检查/监视内存使用量的增长和收缩以找出问题所在?我可以覆盖allocate__t24__default_alloc_template2b0i0Ui
ie__default_alloc_template<false, 0>::allocate(unsigned int)
以便它调用自定义分配调用吗?