关于SIGBUS的总结

SIGBUS(Bus error singal 7) 背景用mmap将文件映射到内存,读取文件时,提示“SIGBUS Bus ERROR”错误分析SIGBUS与SIGSEGV信号的一般区别如下: 1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。 2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。 通过 阅读详情
AI摘要

本文详细解析了SIGBUS与SIGSEGV两种信号的区别,包括它们产生的原因、硬件架构的影响以及如何通过代码示例来区分这两种信号。通过具体的编程实例帮助读者了解地址对齐与地址合法性的校验机制。

From: by scz , <Unix编程/应用问答FAQ>


2.0 理解SIGBUS与SIGSEGV

Q: SIGSEGV我能理解,但有时碰上SIGBUS,这该如何理解。

A: nkwht@SMTH

nkwht用Google获取这样一些知识。有多种可能导致SIGBUS信号:

1) 硬件故障,不用说,程序员最常碰上的肯定不是这种情形。

2) Linux平台上执行malloc(),如果没有足够的RAM,Linux不是让malloc()失败返回,
   而是向当前进程分发SIGBUS信号。

   注: 对该点执怀疑态度,有机会可自行测试确认当前系统反应。

3) 某些架构上访问数据时有对齐的要求,比如只能从4字节边界上读取一个4字节的
   数据类型。IA-32架构没有硬性要求对齐,尽管未对齐的访问降低执行效率。另外
   一些架构,比如SPARC、m68k,要求对齐访问,否则向当前进程分发SIGBUS信号。

SIGBUS与SIGSEGV信号一样,可以正常捕获。SIGBUS的缺省行为是终止当前进程并产
生core dump。

A: Marc Rochkind <rochkind@basepath.com >

SIGBUS与SIGSEGV信号的一般区别如下:

1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该
   指针。通常是未对齐的数据访问所致。

2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对
   应该地址。

A: scz <scz@nsfocus.com > 2002-11-20

参"2.4 如何编程获取栈底地址"中如何捕获SIGBUS与SIGSEGV信号,并利用sigsetjmp、
siglongjmp重获控制权。

测试表明,在x86/Linux、x86/Solaris、SPARC/Solaris平台上,越过栈底的地址访
问导致SIGSEGV信号。在x86/FreeBSD、x86/NetBSD、x86/OpenBSD平台上,越过栈底
的地址访问导致SIGBUS信号,而不是SIGSEGV信号。

下面举例解释一下,什么叫未对齐的数据访问。

--------------------------------------------------------------------------
/*
* Test: SPARC/Solaris 8 64-bit kernel mode
* gcc -Wall -pipe -g -o bus bus.c
*/
#include <stdio.h>
#include <stdlib.h>

int main ( int argc, char * argv[] )
{
    unsigned int        i = 0x12345678;
    unsigned short int *q = NULL;
    unsigned char      *p = ( unsigned char * )&i;

    *p = 0x00;
    q  = ( unsigned short int * )( p + 1 );
    *q = 0x0000;
    return( EXIT_SUCCESS );
}  /* end of main */
--------------------------------------------------------------------------

$ ./bus
总线错误 (core dumped)
$ gdb ./bus core
GNU gdb 5.0
#0  0x1084c in main (argc=1, argv=0xffbefc54) at bus.c:16
16          *q = 0x0000;
(gdb) disas main
Dump of assembler code for function main:
0x10810 <main>   :      save  %sp, -128, %sp
0x10814 <main+4> :      st  %i0, [ %fp + 0x44 ]
0x10818 <main+8> :      st  %i1, [ %fp + 0x48 ]
0x1081c <main+12>:      sethi  %hi(0x12345400), %o1
0x10820 <main+16>:      or  %o1, 0x278, %o0     ! 0x12345678
0x10824 <main+20>:      st  %o0, [ %fp + -20 ]
0x10828 <main+24>:      clr  [ %fp + -24 ]
0x1082c <main+28>:      add  %fp, -20, %o0
0x10830 <main+32>:      st  %o0, [ %fp + -28 ]
0x10834 <main+36>:      ld  [ %fp + -28 ], %o0
0x10838 <main+40>:      clrb  [ %o0 ]
0x1083c <main+44>:      ld  [ %fp + -28 ], %o0
0x10840 <main+48>:      add  %o0, 1, %o1
0x10844 <main+52>:      st  %o1, [ %fp + -24 ]
0x10848 <main+56>:      ld  [ %fp + -24 ], %o0
0x1084c <main+60>:      clrh  [ %o0 ]
0x10850 <main+64>:      clr  %i0
0x10854 <main+68>:      b  0x1085c <main+76>
0x10858 <main+72>:      nop
0x1085c <main+76>:      ret
0x10860 <main+80>:      restore
End of assembler dump.
(gdb) i r pc
pc             0x1084c  67660
(gdb) i r o0
o0             0xffbefbdd       -4260899
(gdb) x/3bx 0xffbefbdd
0xffbefbdd:     0x34    0x56    0x78
(gdb)

从C语言来说,执行"*q = 0x0000;"时导致SIGBUS了。从汇编指令来说,执行"clrh [%o0]"
时导致SIGBUS了,寄存器%o0值为0xffbefbdd,这个地址未对齐在双字节边界上。

注意,gcc编译时并未指定-O<n>进行优化,但仍然使用clrh,而不是两次clrb。类似
的汇编指令有ldw、lduh等等。有人可能碰上读操作也导致SIGBUS,觉得不可理解,
其实读写导致SIGBUS没有本质区别,比如ldw只能读4字节边界上的地址。

bus.c是显式的未对齐。程序员实际最容易面对的是隐式未对齐,主要来自指针的强
制类型转换。下面举例说明这种情形。

--------------------------------------------------------------------------
/*
* Test: SPARC/Solaris 8 64-bit kernel mode
* gcc -Wall -pipe -g -o other_bus other_bus.c
*/
#include <stdio.h>
#include <stdlib.h>

int main ( int argc, char * argv[] )
{
    unsigned int        i = 0x12345678;
    unsigned short int  j = 0x0000;

    j = *( ( unsigned short int * )( ( ( unsigned char * )&i  ) + 1 ) );
    return( EXIT_SUCCESS );
}  /* end of main */
--------------------------------------------------------------------------

$ ./other_bus
总线错误 (core dumped)
$ gdb ./other_bus core
GNU gdb 5.0
#0  main (argc=1, argv=0xffbefc44) at other_bus.c:13
13          j = *( ( unsigned short int * )( ( ( unsigned char * )&i  ) + 1 ) );
(gdb) disas main
Dump of assembler code for function main:
0x10810 <main>   :      save  %sp, -120, %sp
0x10814 <main+4> :      st  %i0, [ %fp + 0x44 ]
0x10818 <main+8> :      st  %i1, [ %fp + 0x48 ]
0x1081c <main+12>:      sethi  %hi(0x12345400), %o1
0x10820 <main+16>:      or  %o1, 0x278, %o0     ! 0x12345678
0x10824 <main+20>:      st  %o0, [ %fp + -20 ]
0x10828 <main+24>:      clrh  [ %fp + -22 ]
0x1082c <main+28>:      lduh  [ %fp + -19 ], %o0
0x10830 <main+32>:      sth  %o0, [ %fp + -22 ]
0x10834 <main+36>:      clr  %i0
0x10838 <main+40>:      b  0x10840 <main+48>
0x1083c <main+44>:      nop
0x10840 <main+48>:      ret
0x10844 <main+52>:      restore
End of assembler dump.
(gdb) i r pc
pc             0x1082c  67628
(gdb)

因此在SPARC架构上编程,一定要留神强制类型转换,务必清楚自己正在干什么,有
没有隐患。

D: yuhuan@SMTH 2004-01-30 11:48

参Linux的mmap(2)手册页

--------------------------------------------------------------------------
使用映射可能涉及到如下信号

SIGSEGV

    试图对只读映射区域进行写操作

SIGBUS

    试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以
    前有文件内容对应,现在为另一进程截断过的内存区域。

 



版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bigwhite.blogbus.com/logs/12296535.html

SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误 信号。内存问题一直是最令我们头疼的事情,弄清楚两个信号的发生缘由对我们很好的理解程序的运行是大有裨益的。

我们来看两段程序:
//testsigsegv.c
int main() {
        char *pc = (char*)0x00001111;
        *pc = 17;
}

//testsigbus.c
int main() {
        int *pi = (int*)0x00001111;
        *pi = 17;
}

上面的代码那么的相似,我们也同样用gcc编译 (加上-g选项,便于gdb调试 ;平台Solaris Sparc),执行结果也都是dump core 。 但通过GDB对core进行观察,你会发现细微的不同。第一个例子出的core原因是:Program terminated with signal 11, Segmentation fault. 而第二个例子的core则提示:Program terminated with signal 10, Bus error. 两者有什么不同呢?这两段代码的共同点都是将一个非法地址赋值给指针变量,然后试图写数据到这个地址。

如果要说清楚这个问题,我们就要结合汇编 码和一些计算机的体系结构 的知识来共同分析了。

先来看testsigsegv.c的汇编码:
... ...
main:
        !#PROLOGUE# 0
        save    %sp, -120, %sp
        !#PROLOGUE# 1
        sethi   %hi(4096), %i0
        or      %i0, 273, %i0
        st      %i0, [%fp-20]
        ld      [%fp-20], %i1
        mov     17, %i0
        stb     %i0, [%i1]
        nop
        ret
        restore
... ...

我们关注的是这句:stb     %i0, [%i1]
从 计算机底层的执行角度来说,过程是如何的呢?%i0寄存器里存储的是立即数17,我们要将之存储到寄存器%i1的值指向的内存地址。这一过程对于CPU来 说其指挥执行的正常过程是:将寄存器%i0中的值送上数据总线,将寄存器%i1的值送到地址总线,然后使能控制总线上的写信号完成这一向内存写1 byte数据的过程。

我们再看testsigbus.c的汇编码:
... ...
main:
        !#PROLOGUE# 0
        save    %sp, -120, %sp
        !#PROLOGUE# 1
        sethi   %hi(4096), %i0
        or      %i0, 273, %i0
        st      %i0, [%fp-20]
        ld      [%fp-20], %i1
        mov     17, %i0
        st      %i0, [%i1]
        nop
        ret
        restore
... ...

同 样最后一句:st      %i0, [%i1],CPU执行的过程与testsigsegv.c中的一致(只是要存储数据长度是4字节),那为什么产生错误的原因不同呢?一个是 SIGSEGV,而另一个是SIGBUS。这里涉及到的就是对内存地址的校验的问题了,包括对内存地址是否对齐 的校验以及该内存地址是否合法的校验。

我们假设如果首先进行的内存地址是否合法的校验(是否归属于用户进程的地址空间),那么我们回顾一下,这两个程序中的地址0x00001111显然都不合法,按照这种流程,两个程序都应该是SIGSEGV导致的core 才对,但是事实并非如此。那难道是先校验内存地址的对齐?我们再看这种思路是否合理?

testsigsegv.c 中,0x00001111这个地址值被赋给了char *pc;也就是告诉CPU通过这个地址我们要存取一个字节的值,对于一个字节长度的数据,无所谓对齐,所以该地址通过对齐校验;并被放到地址总线上了。而 在testsigbus.c里,0x00001111这个地址值被赋给了int *pi;也就是告诉CPU通过这个地址我们要存取一个起码4个字节的值,那么对于长度4个字节的对象,其存放地址起码要被4整除才可以,而 0x00001111这个值显然不能满足要求,也就不能通过内存对齐的校验。也就是说SIGBUS这个信号在地址被放到地址总线之后被检查出来的不符合对 齐的错误;而SIGSEGV则是在地址已经放到地址总线上后,由后续流程中的某个设施检查出来的内存违法访问错误。

一般我们平时遇到SIGBUS时总是因为地址未对齐 导致的,而SIGSEGV则是由于内存地址不合法造成的。

 

当mmap遇到sigbus 今天遇见程序出现sigbus的问题。 仔细查看了程序的源码,应该没什么逻辑问题。 程序每次运行到memcpy(&sum_cnt,addr,data_len)的时候就sigbus了~ 真是奇怪啊,查看了addr不为空。 addr使用的是文件映射之后得到的内存地址:如下: map_addr 就是映射之后所得。 bool scan_mapfile(char* file_path,  c 阅读详情

相关推荐

【linux】SIGSEGV与SIGBUS的区别分析

Date: 2018/9/25 1、参考 https://blog.youkuaiyun.com/richu123/article/details/71106672 https://www.cnblogs.com/jiu0821/p/7207082.html https://zh.cppreference.com/w/c/program/SIG_types https://www.geeksforgeeks...

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 1835

段错误(SIGSEGV)与总线错误(SIGBUS)

段错误(SIGSEGV)与总线错误(SIGBUS) 前言 最近整理组里的历史代码,发现有一段程序运行有问题,喜提Segmentation fault (core dumped),这个问题一般是访问非法内存造成的,但是使用gdb进行调试时,发现出现了没见过的错误SIGBUS。 Program received signal SIGBUS, Bus error. 0x0000000000402007 in main () at energy-xtc.c:128 128 HBN[l][k] = sta

EngzSinger的博客 6178

Nacos2.3.0与vastBase数据库的集成实践指南

本文详细介绍了将Nacos 2.3.0的默认数据库从MySQL迁移至vastBase数据库的完整实践指南。内容涵盖前期环境准备、源码改造、依赖配置、SQL适配、数据库初始化以及最终的编译打包与部署验证,旨在帮助开发者在国产化或特定技术栈场景下,实现微服务配置中心与vastBase数据库的自主可控集成。

plant的博客 273

sigbus内存错误

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34220623的博客 7232

VSCode连接SAP ABAP开发环境

本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。

weixin_45293769的博客 2209

多周期路径及set_multicycle_path详解

默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path .........

Jackiezhang1993的博客 4万+

段错误 (SIGSEGV) vs 总线错误 (SIGBUS)

这通常是由于 CPU 的对齐问题导致的(例如,尝试从一个不是 4 的倍数的地址读取长整型(long)数据)。(也称为 SIGSEGV,通常是信号 11)发生在程序试图读写分配给它的内存之外的内存时,或者试图写入只读内存时。-> 内存访问未对齐(例如,如果多字节访问必须 16 位对齐,那么以字节为单位的地址 0、2、4、6 等会被视为对齐的,因此可以访问,而地址 1、3、5 等则被视为未对齐的。段错误和总线错误的主要区别在于,段错误表示对有效内存的无效访问,而总线错误则表示对无效地址的访问。

Zh_xy33的博客 3030

ZYNQ 系统的IEEE1588 实现方法

zynq IEEE588/PTP 实现方案(讨论稿)

姚家湾博客 1万+

嵌入式 SIGBUS和SIGSEGV详解

 一、导致SIGSEGV      1.试图对只读映射区域进行写操作 。     2.访问的内存已经被释放,也就是已经不存在或者越界。 3.官方说法是: SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:  (1)buffer overflow --- usuall

skdkjxy的专栏 6606

保姆级教程:在Ubuntu 20.04上从源码编译Apollo自动驾驶平台(含GPU环境配置)

本文提供了一份详细的Ubuntu 20.04上从源码编译Apollo自动驾驶平台的保姆级教程,包括GPU环境配置、Docker部署和编译构建等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成Apollo平台的编译和验证,适用于自动驾驶技术研究和应用开发。

weixin_30876945的博客 406

LVGL 实战:倒计时翻页钟

环境:LVGL 9.x + PC 模拟器。每个数字做成上下两半的卡片,秒变时用绕中缝翻页:上半旧页折叠下去、下半新页展开上来,配合阴影遮罩做出立体感。从 02:00 倒计时到 0,闪一下再重置。界面文案用英文(默认字体无中文)。

摸鱼专家 209

Linux错误(2)程序触发SIGBUS信号分析

SIGBUS是BUS error的缩写,中文称为总线错误信号。它是Unix/Linux系统中的一种异常信号,通常在访问内存时发生某些类型的错误时产生。地址对齐错误(Alignment Fault):当访问的内存地址不满足硬件的对齐要求时触发。例如在需要4字节对齐的系统上访问一个地址不是4的倍数的int变量。未映射的物理地址访问:试图访问未映射到任何设备的物理地址空间时会触发SIGBUS。这可能是由错误的指针运算或直接访问物理内存导致的。特定于设备的硬件错误。

梅花香自苦寒来,宝剑锋从磨砺出。 3418

Open3D 点云DBSCAN聚类算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够识别任意形状的聚类,并处理噪声数据。

纵马踏花向自由 1833

理解SIGBUS与SIGSEGV

理解SIGBUS与SIGSEGVSearched by googleQ: SIGSEGV我能理解,但有时碰上SIGBUS,这该如何理解。A: nkwht@smthnkwht用Google获取这样一些知识。有多种可能导致SIGBUS信号:1) 硬件故障,不用说,程序员最常碰上的肯定不是这种情形。2) Linux平台上执行malloc(),如果没有足够的RAM,Linux不是让malloc()

新博客请访问- http://oliveryang.net 4121

【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势

所有LAMMPS pair_style命令如下表所示。有些样式有加速版本。这由括号中的附加字母表示:g = GPU, i = INTEL, k = KOKKOS, o = OPENMP, t = OPT。

荷塘阅色 3015

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

由mmap引发的SIGBUS

一直以来都觉得使用mmap读文件是非常高效、非常优雅的做法(参见《从"read"看系统调用的耗时》)。mmap之后,就可以通过内存访问的方式访问到文件里的内容,省去了read这样的系统调用。 却不曾想过,mmap以后,如果读文件出错会发生什么…… 今晚看到一篇介绍apache bug的文章,里面说到,apache使用mmap来实现对静态文件的访问。在读文件之前,apache使用stat系统

ctthuangcheng 5189

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

关于SIGBUS 信号

最近遇到一个程序因为收到 SIGBUS死机的问题。刚开始不清楚是哪个模块导致的,用 address sanitizer 也查不出来。 后来想了一下,可以用gdb来执行程序,当收到了 BUS 消息的时候, gdb会自动在出问题的代码行停下来。 下面是一个例子。 // C program to demonstrate Bus Error #include <stdlib.h> #include <signal.h> #include <pthread.h> #incl

小猪爱拱地 5531

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIGBUS 深入解析

SIGBUS信号深度解析:内存访问错误的底层机制与调试方法 本文详细剖析了SIGBUS信号的技术原理,包括CPU内存访问机制、不同架构对齐要求差异以及典型错误场景。文章提供了内存对齐检查、gdb调试和valgrind检测等高级调试方法,并分析了Linux内核和嵌入式系统中的特殊处理方式。通过数据库系统和高性能计算的实际案例,展示了SIGBUS问题的定位思路。最后给出了内存管理最佳实践和跨平台开发注意事项,包括结构体设计优化、编译器对齐控制等预防措施。

bkspiderx的博客 611

mmap引发的SIGBUS

转载出处:http://blog.youkuaiyun.com/ctthuangcheng/article/details/8916015 一直以来都觉得使用mmap读文件是非常高效、非常优雅的做法(参见《从"read"看系统调用的耗时》)。mmap之后,就可以通过内存访问的方式访问到文件里的内容,省去了read这样的系统调用。 却不曾想过,mmap以后,如果读文件出错会发生什么…… 今晚看到一篇介

u013525455的博客 2539

Program received signal SIGBUS, Bus error

理解SIGBUS与SIGSEGV Q: SIGSEGV我能理解,但有时碰上SIGBUS,这该如何理解。 A: nkwht@SMTH nkwht用Google获取这样一些知识。有多种可能导致SIGBUS信号: 1) 硬件故障,不用说,程序员最常碰上的肯定不是这种情形。 2) Linux平台上执行malloc(),如果没有足够的RAM,Linux不是让malloc()失败...

iteye_13558的博客 6295

X86 Linux 下 SIGBUS 总结

SIGBUS 在 x86 Linux 上并不多见,但一旦出现,其调用堆栈常常让人摸不着头脑,加之信号问题各平台系统间差异较大,更让人难以理清,这里稍微总结一下 x86 Linux 上大概有哪些情形会触发 BUS ERROR. 文件映射访问异常 这是 SIGBUS 在用户态最为常见的场景,也最容易触发,通常来说根本原因都是进程 mmap 了一个文件后,另外的进程把这个文件截断了,导致 mmap 出来...

weixin_34279061的博客 997

linux信号之SIGBUS,SIGEMT,SIGFPE,SIGILL等

SIGBUS 指示一个实现定义的硬件故障。 SIGEMT 指示一个实现定义的硬件故障 SIGFPE 此信号表示一个算术运算异常,例如除以0,浮点溢出等。 SIGILL 此信号指示进程已执行一条非法硬件指令。 SIGINFO 这是一种4 . 3 + B S D信号,当用户按状态键(一般采用C t r l - T)时,终端驱动程 序产生此信号并送至前台进程组中的每一个进程。此信号通常造成在终端上显示前 台进程组中各进程的状态信息。 SIGINT 当用户按中断键(一般采用D E L E T..

D&T的博客 4614

SIGBUS和SIGSEGV

一、导致SIGSEGV      1.试图对只读映射区域进行写操作 。     2.访问的内存已经被释放,也就是已经不存在或者越界。 3.官方说法是: SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:  (1)buffer overflow --- usually caus

dong976209075的专栏 3279

perf出现SIGBUS的coredump

perf SIGBUS

weixin_43412488的博客 889

C++同名class引发的coredump SIGBUS 问题总结

军规!!! 在同一工程里,绝对不要拷贝class的代码,并且类名保持不变,不同模块也不行,不同目录也不行,总之绝对不要出现同名的类。可灵活使用namespace来进行隔离。 问题点 模块A的代码通过了UT,以及功能测试等所有测试之后,发起PR将代码合入master的时候,碰到了CI始终不能成功的问题。深入分析以后发现是进程crash了,发生了SIGBUS。以下记录了调试的过程。 ...

1074
上一篇: linux mtd源码分析(好东西)
下一篇: 中国大陆的MNC
CodeJoker
博客等级 码龄18年 50粉丝 37原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值