Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
在android里做ndk编程的时候,碰到个随机性错误
错误信息如下:
05-06 15:59:44.411: A/libc(3347): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
05-06 15:59:44.911: I/DEBUG(3344): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-06 15:59:44.911: I/DEBUG(3344): Build fingerprint: 'i.Kan/full_godbox/godbox:4.0.3/IML74K/eng.mipt.20130428.110435:eng/test-keys'
05-06 15:59:44.911: I/DEBUG(3344): pid: 3347, tid: 3348 >>> com.nef.xxx <<<
05-06 15:59:44.911: I/DEBUG(3344): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
05-06 15:59:44.911: I/DEBUG(3344): r0 deadbaad r1 00d9c060 r2 40000000 r3 00000000
05-06 15:59:44.911: I/DEBUG(3344): r4 00000000 r5 00000027 r6 415bf010 r7 00000062
05-06 15:59:44.911: I/DEBUG(3344): r8 415bf018 r9 00000047 10 100ffb94 fp 100ffbd8
05-06 15:59:44.911: I/DEBUG(3344): ip ffffffff sp 100ffb50 lr 40071121 pc 4006d880 cpsr 60000030
05-06 15:59:44.911: I/DEBUG(3344): d0 400000003eaaaaab d1 3ff000003f800000
05-06 15:59:44.911: I/DEBUG(3344): d2 457ff80000000fff d3 000000003f000000
05-06 15:59:44.911: I/DEBUG(3344): d4 00001fff00000000 d5 3fe999999999999a
05-06 15:59:44.911: I/DEBUG(3344): d6 3ff0000000000000 d7 3eaaaaab3f800000
05-06 15:59:44.911: I/DEBUG(3344): d8 0000000000000000 d9 0000000000000000
05-06 15:59:44.911: I/DEBUG(3344): d10 0000000000000000 d11 0000000000000000
05-06 15:59:44.911: I/DEBUG(3344): d12 0000000000000000 d13 0000000000000000
05-06 15:59:44.911: I/DEBUG(3344): d14 0000000000000000 d15 0000000000000000
05-06 15:59:44.911: I/DEBUG(3344): scr 80000012
05-06 15:59:45.011: I/DEBUG(3344): #00 pc 00017880 /system/lib/libc.so
05-06 15:59:45.011: I/DEBUG(3344): #01 pc 00007d8e /system/lib/libcutils.so (mspace_free)
05-06 15:59:45.011: I/DEBUG(3344): #02 pc 0007b746 /system/lib/libdvm.so (_Z21dvmHeapSourceFreeListjPPv)
05-06 15:59:45.011: I/DEBUG(3344): #03 pc 00042f88 /system/lib/libdvm.so
05-06 15:59:45.011: I/DEBUG(3344): #04 pc 00032fc8 /system/lib/libdvm.so (_Z22dvmHeapBitmapSweepWalkPK10HeapBitmapS1_jjPFvjPPvS2_ES2_)
05-06 15:59:45.011: I/DEBUG(3344): #05 pc 00042f44 /system/lib/libdvm.so (_Z27dvmHeapSweepUnmarkedObjectsbbPjS_)
05-06 15:59:45.011: I/DEBUG(3344): #06 pc 000336ac /system/lib/libdvm.so (_Z25dvmCollectGarbageInternalPK6GcSpec)
05-06 15:59:45.011: I/DEBUG(3344): #07 pc 0007bc1c /system/lib/libdvm.so
05-06 15:59:45.011: I/DEBUG(3344): #08 pc 0005f906 /system/lib/libdvm.so
05-06 15:59:45.011: I/DEBUG(3344): #09 pc 00012e04 /system/lib/libc.so (__thread_entry)
05-06 15:59:45.011: I/DEBUG(3344): #10 pc 00012958 /system/lib/libc.so (pthread_create)
05-06 15:59:45.011: I/DEBUG(3344): code around pc:
05-06 15:59:45.011: I/DEBUG(3344): 4006d860 4623b15c 2c006824 e026d1fb b12368db \.#F$h.,..&..h#.
05-06 15:59:45.011: I/DEBUG(3344): 4006d870 21014a17 6011447a 48124798 24002527 .J.!zD.`.G.H'%.$
05-06 15:59:45.011: I/DEBUG(3344): 4006d880 f7f47005 2106ee60 eeeef7f5 460aa901 .p..`..!.......F
05-06 15:59:45.011: I/DEBUG(3344): 4006d890 f04f2006 94015380 94029303 eab8f7f5 . O..S..........
05-06 15:59:45.011: I/DEBUG(3344): 4006d8a0 4622a905 f7f52002 f7f4eac2 2106ee4c .."F. ......L..!
05-06 15:59:45.011: I/DEBUG(3344): code around lr:
05-06 15:59:45.011: I/DEBUG(3344): 40071100 41f0e92d 46804c0c 447c2600 68a56824 -..A.L.F.&|D$h.h
05-06 15:59:45.011: I/DEBUG(3344): 40071110 e0076867 300cf9b5 dd022b00 47c04628 gh.....0.+..(F.G
05-06 15:59:45.011: I/DEBUG(3344): 40071120 35544306 37fff117 6824d5f4 d1ee2c00 .CT5...7..$h.,..
05-06 15:59:45.011: I/DEBUG(3344): 40071130 e8bd4630 bf0081f0 000283da 41f0e92d 0F..........-..A
05-06 15:59:45.011: I/DEBUG(3344): 40071140 fb01b086 9004f602 461f4815 4615460c .........H.F.F.F
05-06 15:59:45.011: I/DEBUG(3344): memory map around addr deadbaad:
05-06 15:59:45.011: I/DEBUG(3344): be97c000-be99d000 [stack]
05-06 15:59:45.011: I/DEBUG(3344): (no map for address)
05-06 15:59:45.011: I/DEBUG(3344): ffff0000-ffff1000 [vectors]
05-06 15:59:45.011: I/DEBUG(3344): stack:
05-06 15:59:45.011: I/DEBUG(3344): 100ffb10 4009965c /system/lib/libc.so
05-06 15:59:45.011: I/DEBUG(3344): 100ffb14 00d9c060 [heap]
05-06 15:59:45.011: I/DEBUG(3344): 100ffb18 00000a96
05-06 15:59:45.011: I/DEBUG(3344): 100ffb1c 4006fecd /system/lib/libc.so
05-06 15:59:45.011: I/DEBUG(3344): 100ffb20 4009970c /system/lib/libc.so
05-06 15:59:45.011: I/DEBUG(3344): 100ffb24 4009e85c
05-06 15:59:45.011: I/DEBUG(3344): 100ffb28 00000000
05-06 15:59:45.011: I/DEBUG(3344): 100ffb2c 40071121 /system/lib/libc.so
05-06 15:59:45.011: I/DEBUG(3344): 100ffb30 00000000
05-06 15:59:45.011: I/DEBUG(3344): 100ffb34 100ffb64
05-06 15:59:45.011: I/DEBUG(3344): 100ffb38 415bf010 /dev/ashmem/dalvik-heap (deleted)
05-06 15:59:45.011: I/DEBUG(3344): 100ffb3c 00000062
05-06 15:59:45.011: I/DEBUG(3344): 100ffb40 415bf018 /dev/ashmem/dalvik-heap (deleted)
05-06 15:59:45.011: I/DEBUG(3344): 100ffb44 4007028d /system/lib/libc.so
05-06 15:59:45.011: I/DEBUG(3344): 100ffb48 df0027ad
05-06 15:59:45.021: I/DEBUG(3344): 100ffb4c 00000000
05-06 15:59:45.021: I/DEBUG(3344): #00 100ffb50 00000000
05-06 15:59:45.021: I/DEBUG(3344): 100ffb54 00000000
05-06 15:59:45.021: I/DEBUG(3344): 100ffb58 00000000
05-06 15:59:45.021: I/DEBUG(3344): 100ffb5c 00000000
05-06 15:59:45.021: I/DEBUG(3344): 100ffb60 00cf2780 [heap]
05-06 15:59:45.021: I/DEBUG(3344): 100ffb64 fffffbdf
05-06 15:59:45.021: I/DEBUG(3344): 100ffb68 00000020
05-06 15:59:45.021: I/DEBUG(3344): 100ffb6c 00000020
05-06 15:59:45.021: I/DEBUG(3344): 100ffb70 00000000
05-06 15:59:45.021: I/DEBUG(3344): 100ffb74 40018d91 /system/lib/libcutils.so
05-06 15:59:45.021: I/DEBUG(3344): #01 100ffb78 00cf2780 [heap]
05-06 15:59:45.021: I/DEBUG(3344): 100ffb7c 4162fe00 /dev/ashmem/dalvik-heap (deleted)
05-06 15:59:45.021: I/DEBUG(3344): 100ffb80 100ffcf4
05-06 15:59:45.021: I/DEBUG(3344): 100ffb84 00000062
05-06 15:59:45.021: I/DEBUG(3344): 100ffb88 415bf018 /dev/ashmem/dalvik-heap (deleted)
05-06 15:59:45.021: I/DEBUG(3344): 100ffb8c 40800749 /system/lib/libdvm.so
05-06 15:59:45.661: I/BootReceiver(1265): Copying /data/tombstones/tombstone_01 to DropBox (SYSTEM_TOMBSTONE)
05-06 15:59:45.671: I/DEBUG(3344): debuggerd committing suicide to free the zombie!
05-06 15:59:45.671: I/DEBUG(3440): debuggerd: Apr 28 2013 11:10:17
05-06 15:59:45.681: D/Zygote(917): Process 3347 terminated by signal (11)
05-06 15:59:45.681: I/ActivityManager(1265): haveBgApp:true app.setAdj:10
05-06 15:59:45.681: I/ActivityManager(1265): Process com.nef.xxx (pid 3347) has died.
05-06 15:59:45.681: W/ActivityManager(1265): Scheduling restart of crashed service com.nef.xxx/.service.renderService in 5000ms
05-06 15:59:48.241: D/PowerManagerService(1265): Screen must keep ON all the time! TimeoutTask return.
05-06 15:59:50.691: D/dalvikvm(3441): Late-enabling CheckJNI
05-06 15:59:50.701: I/ActivityManager(1265): Start proc com.nef.xxx for service com.nef.xxx/.service.renderService: pid=3441 uid=10009 gids={1015, 3003}
05-06 15:59:50.721: I/dalvikvm(3441): Turning on JNI app bug workarounds for target SDK version 9...
这个错误并不是再调用某个jni接口的时候发生的
而是反复调用之后(或是上层进行了一些其他操作后)冷不丁的蹦出来
程序虽然没有弹框,但进程已经挂了
这种随机问题最难搞了,很难确定哪行代码出的问题
于是各种百度谷歌寻求解决方案
其中最重要的错误信息是 Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
网上也有很多人都遇到类似的问题
主要症结还是内存操作的问题
在经过各种排查测试后,折腾了老半天
终于找到问题所在,的确是内存操作有误
在jni里,我想把jbyteArray转化成char*
于是写了个转化函数,原型如下:
- <span style="font-size:14px;">char* ConvertJByteaArrayToChars(JNIEnv *env, jbyteArray bytearray, jbyte *&bytes)
- {
- char *chars = NULL;
- bytes = env->GetByteArrayElements(bytearray, 0);
- chars = (char *)bytes;
- int chars_len = env->GetArrayLength(bytearray);
- chars[chars_len] = 0;
- return chars;
- }</span>
问题就出在
- <span style="font-size: 14px; color: rgb(255, 0, 0); ">chars[chars_len] = 0;</span>
这句话
假如GetByteArrayElements返回的是abc
则chars_len值为3
而chars[3]=0就等于是数组越界访问修改了
这样无形当中就破坏了堆内存给程序留下安全隐患
到特定时候就会触发错误爆发
后函数改为:
- <span style="font-size:14px;">char* ConvertJByteaArrayToChars(JNIEnv *env, jbyteArray bytearray, jbyte *&bytes)
- {
- char *chars = NULL;
- bytes = env->GetByteArrayElements(bytearray, 0);
- int chars_len = env->GetArrayLength(bytearray);
- chars = new char[chars_len + 1];
- memcpy(chars, bytes, chars_len);
- chars[chars_len] = 0;
- return chars;
- }</span>
就没有问题了
在调用函数处处理了char*之后再delete掉就ok了
哎,C++的指针真是让人又爱又恨
以后大家遇到类似问题
还是好好检查下native代码
看看有没有指针操作不当的问题
指针有风险,操作需谨慎
仅以此文小记,希望对大家有帮助~
Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)的更多相关文章
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 1755 (CrBrowserMain)问题
- 关于cocos2dx 3.0升级崩溃报错(unable to load native library) 和(Fatal signal 11 (SIGSEGV) at 0x00000000)
近期一直在Windows平台开发cocos-2dx游戏,期间做了一次引擎升级,升级到了3.0正式版本号.Windows平台上表现非常正常,没有出现什么问题. 上周五准备公布一个安卓包,编译非常轻松的就 ...
- ANDROID开发 Fatal signal 11(SIGSEGV) at 0x问题解决方案
最近做ANDROID开发,也遇到了很多程序员遇到的一个问题:FATAL SIGNAL 11(SIGSEGV) at 0xxxxx,自然是各种搜索是否有人已然解决,虽然搜索出来的已有案例不少,基本都是内 ...
- A/libc:fatal signal 11(SIGSEGV).code 1, fault addr 0x0 in tid 26488 (VideoEncoder)
在调试Camera模块:发现相同的代码在厂家提供的环境里边编译.就是ok的,在我们的源码树中编译,将HAL库推进去后.就会signal 11退出. 一.现象 F/libc ( ): Fatal sig ...
- Fatal signal xx (SIGSEGV) at
Fatal signal 11问题的解决方法 http://blog.csdn.net/tankai19880619/article/details/9004619 如何定位Android NDK开发 ...
- [cocos2d-x][apk打包][Fatal signal 11][andriod]Eclipse编译Fatal signal 11报错-都是字符赋值惹的祸
流程重现: 使用coco2d-x制作了一个2048,在xcode模拟器执行以及在pad上真机调试都是没有问题的. 可是在使用eclipse调试打包android可以执行,可是进入游戏之后会在随机的地方 ...
- Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
使用Qt写了个窗口,运行报错,无法正常运行python程序,获得的报错信息如下: Process finished with exit code 139 (interrupted by signal ...
- [报错] Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
今天下午做python的作业,我用PyQt5 中 利用QWebEngineView打开外部网页. 但是一直闪退,一运行就闪退. 显示报错:Process finished with exit code ...
- Pycharm出现Segmentation fault...(interrupted by signal 11: SIGSEGV)的解决方法
众所周知,用pycharm远程服务器debug代码已经成为学习深度学习相关代码的有力工具,但是最近创建了一个虚拟环境,进行debug的时候,莫名会出现下面这个错误,看的我都抽风了 bash: line ...
随机推荐
- JAVA彩色图片变灰处理
File file = new File("F:/firefox.png"); File destFile = new File("F:/pic/" + Sys ...
- mongodb的副本集总结
主节点A.备份节点B.仲裁者C.是否真的需求仲裁者? 需要. 怎样才算大多数表格如下: 怎样才算大多数表格 副本集中的成员总数 副本集中的大多数 1 1 2 2 3 2 4 3 5 3 6 4 7 4 ...
- JAVA多态需要注意的一些问题
public class MainTest { static class A { public int i; public void f() { System.out.println("AA ...
- PHP XML DOM
PHP XML DOM 内建的 DOM 解析器使在 PHP 中处理 XML 文档成为可能. DOM 是什么? W3C DOM 提供了针对 HTML 和 XML 文档的标准对象集,以及用于访问和操作这些 ...
- 自动加载类PHP中spl_autoload_register函数的用法
spl_autoload_register(PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明bool spl_autoloa ...
- zepto源码研究 - zepto.js - 1
简要:网上已经有很多人已经将zepto的源码研究得很细致了,但我还是想写下zepto源码系列,将别人的东西和自己的想法写下来以加深印象也是自娱自乐,文章中可能有许多错误,望有人不吝指出,烦请赐教. 首 ...
- Qt5-控件-QMenu,QMenuBar-菜单栏详解-菜单热键-菜单校验功能
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMenu> #inclu ...
- PHPCMS V9 简单的二次开发
更多二次开发技巧,查看phpcms系统帮助 ,前台模板解析后的缓存 caches\caches_template\default 前台控制类index.php,前台标签类*_tag.class.php ...
- 一个PHP常用表单验证类(基于正则)
一个基于正则表达式的PHP常用表单验证类,作者:欣然随风.这个表单判断类的功能有:验证是否为指定长度的字母/数字组合.验证是否为指定长度汉字.身 份证号码验证.是否是指定长度的数字.验证邮件地址.电话 ...
- php 学习路线 赵兴壮2014年4月28 日 加油
第一阶段 第一讲,WEB基础 1.1 网站基本知识: 1.2 网络协议介绍: 1.3 B/S与C/S结构的区别: 1.4 WEB编程.网站开发技术介绍. 第二讲,网页设计 2 ...