相关文章推荐
温柔的灭火器  ·  javascript - ...·  1 年前    · 
直爽的黑框眼镜  ·  android - ...·  1 年前    · 
博学的地瓜  ·  java ...·  1 年前    · 

SIG是信号名的通用前缀,SEGV是段违法的缩写,SEGV_MAPERR表示堆栈映射错误。SIGSEGV一般发生内存操作时,比如__memcpy_base、memcpy等。在 POSIX 兼容的平台上,SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。SIGSEGV 的符号常量在头文件 signal.h 中定义。因为在不同平台上,信号数字可能变化,因此符号信号名被使用。通常情况下,它的信号是11。
当程序企图访问 CPU 无法定址的内存区块时,计算机程序可能抛出 SIGSEGV。SIGSEGV通常由操作系统生成,但是有适当权限的用户可以在需要时使用kill系统调用或kill命令(一个用户级程序,或者一个shell内建命令)来向一个进程发送信号。

以下是转自bugly的两个ios的例子:
闪退场景一:recorder deleteRecording  之前 先判断文件是否存在,否则会造成过度释放,解决方法:
if ([[NSFileManager defaultManager] fileExistsAtPath:self.recorder.url.path]) {
if (![self.recorder deleteRecording])
NSLog(@"Failed to delete %@", self.recorder.url);
}
闪退场景二: delegate = nil 。
将XXViewContrller设置为delegate时,当页面发生跳转时,XXViewController的对象会被释放,这是代码走到[_delegate callbackMethod],便出现crash。解决方法有二:1.将@property (nonatomic ,assign) id <BLELibDelegate>delegate; 中 assign关键字改为weak。 2.在XXViewController的delloc方法中添加:xxx.delegate = nil;

SIG是信号名的通用前缀,SEGV是段违法的缩写,SEGV_MAPERR表示堆栈映射错误。SIGSEGV一般发生内存操作时,比如__memcpy_base、memcpy等。在 POSIX 兼容的平台上,SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。SIGSEGV 的符号常量在头文件 signal.h 中定义。因为在不同平台上,信号数字可能变化... 01-01 17:17:34.870 F/libc    ( 1606): Fatal sig nal 11 ( SIGSEGV ) at 0x00000018 (code=1), thread 1942  01-01 17:17:34.930 I/DE BUG ( 1167): *** *** *** *** *** * -&gt; % ./a.out 9000000 the size is: 0x895440 [2] 10558 segmentation fault (core dumped) ./a.out 9000000 打印跟了一下程序,段错误发生在定义数组的时候,感觉程序没毛病,就使用gdb跟了一下,效果如下: (gdb) r ... 在日志的最后看到了红字 IMemory : cannot map BpMemoryHeap (binder=0x9b2af780), size=18665472, fd=87 (Out of memory) 什么?我OOM了?但是我在开发的过程中,明明通过LeakCancy内存泄漏神器进行了周密的内存泄漏排除鸭。 并且问题并不复现,在思考了两三天后,并
SIGSEGV ( SEGV _ MAPER R) 记录一下关于我在项目中遇到 SIGSEGV ( SEGV _ MAPER R) 异常引起原因。 在 POSIX 兼容的平台上, SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。 SIGSEGV 的符号常量在头文件 sig nal.h 中定义。因为在不同平台上,信号数字可能变化,因此符号信号名被使用。通常,它是信号11。 对于不正确的内存处理,如当程序企图访问 CPU 无法定址的内存区块时,计算机程序可能抛出 SIGSEGV 。操作系统可能使用信号栈
在程序运行的过程中,有时候会抛出错误 SIGSEGV 。 什么是 SIGSEGV SIGSEGV SIG 是信号名的通用前缀, SEGV 是segmentation violation,也就是存储器区段错误。 SIGSEGV 原因: 一般是无效的内存引用,导致进程异常终止。一般可以具体为下面三种情况: 访问空指针。 char *c = NULL; *c; // dereferencing a NULL pointer 内存越界访问 char *c = "Hello"; c[10] =
问题:在验证某些功能时,启动camera auto DC模式成功,切换其它模式失败基本必现camera error,crash log如下: C015C0D 08-08 16:01:22.447 6408 6600 F libc : Fatal sig nal 11 ( SIGSEGV ), code 1 ( SEGV _ MAPER R), fault addr 0xe375435c in tid 6600 (res_init), pid 6408 (provider@2.4-se) C015DB6 0...
Crash reason: SIGSEGV / SEGV _ MAPER R Crash address: 0xaef15000 Process uptime: not available Thread 0 (crashed) 0 libQtGui.so.4 + 0x29531a r0 = 0x00bb80b6 r1 = 0x00bb00b6 r2 = 0x00000011 r3 = 0xff000000 r4 = 0xbac6b57a r5 = 0x00d300cd r6 = 0xaef15000 r7 = 0x02380124 r8 = 0x00ff0000 r9 = 0x02380124 r10 = 0x00000000 r12 = 0xaef15011 fp = 0x0000000f sp = 0xbee2c2c0 lr = 0xaef15000 pc = 0xb64ae31a Found by: given as instruction pointer in context 1 rtm2!google_breakpad::LinuxPtraceDumper::GetThreadInfoByIndex(un sig ned int, google_breakpad::ThreadInfo*) [linux_ptrace_dumper.cc : 224 + 0xa] sp = 0xbee2c2d8 pc = 0x0001ec08 Found by: stack scanning 2 0xffee9b0b r4 = 0xffee9b0d r5 = 0xffee9b0d r6 = 0xffee9b0d r7 = 0xffee9b0d r8 = 0xffee9b0d r9 = 0xffee9b0d r10 = 0xffee9b0d fp = 0xffee9b0d sp = 0xbee2c418 pc = 0xffee9b0d Found by: call frame info 3 libQtGui.so.4 + 0x28e565 sp = 0xbee2c430 pc = 0xb64a7567 Found by: stack scanning 这段是什么意思?
这段是一段程序崩溃的日志信息,其中包含了崩溃的原因、地址、进程运行时间、线程信息等。 Crash reason: SIGSEGV / SEGV _ MAPER R 表示崩溃的原因是段错误,这是指程序试图访问不属于其自己的内存区域。 Crash address: 0xaef15000 是崩溃发生时程序访问的非法内存地址。 Process uptime: not available 表示无法获取进程运行时间。 Thread 0 (crashed) 0 libQtGui.so.4 0x29531a 是崩溃发生时调用堆栈中的第一个函数调用,并且这个函数在 libQtGui.so.4 库中,在 0x29531a 位置发生崩溃。 r0-r12,fp,sp,lr,pc是程序在崩溃时的寄存器值。 Found by: given as instruction pointer in context 1 rtm2!google_breakpad::LinuxPtraceDumper::GetThreadInfoByIndex(un sig ned int, google_breakpad::ThreadInfo*) [linux_ptrace_dumper.cc : 224 0xa] 表示这些信息是由LinuxPtraceDumper来收集的。 总之,这段日志信息表明程序在libQtGui.so.4库中的0x29531a位置发生了段错误,导致程序崩溃。