android调用JNI报Fatal signal 11 (SIGSEGV) at XXXXX的问题,高分求教大家!!!!! 贴一下自己的在LogCat中的打印信息如下奇怪的是程序已经报错了,下面还有C写的打印信息,难道不是出错了JNI中的C代码马上就停止运行了吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在我的SO文件下NDK中执行addr2line -e libavplayer.so 61b5c482后得到的结果是??:0是不是我这样的方式不对,我的SO文件是几个静态的a文件编译后产生的SO文件 LOG中并没有看到挂掉的堆栈信息啊 一般像这种04-15 11:06:53.859 F/libc ( 2398): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)04-15 11:06:53.869 I/DEBUG ( 1274): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***04-15 11:06:53.869 I/DEBUG ( 1274): Build fingerprint: 'Xiaomi/mione_plus/mione_plus:4.0.4/IMM76D/ICS24.0:user/release-keys'04-15 11:06:53.869 I/DEBUG ( 1274): pid: 2398, tid: 2555 >>> org.linphone <<<04-15 11:06:53.869 I/DEBUG ( 1274): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000004-15 11:06:53.869 I/DEBUG ( 1274): r0 00fad7d0 r1 00000000 r2 000000a0 r3 0000005004-15 11:06:53.869 I/DEBUG ( 1274): r4 00fbf180 r5 00000000 r6 5cfd59a0 r7 0000000004-15 11:06:53.869 I/DEBUG ( 1274): r8 5cfd5820 r9 5cfd5814 10 5cfd58a0 fp 5cfd581804-15 11:06:53.869 I/DEBUG ( 1274): ip 00000001 sp 5cfd5804 lr 5c8546e4 pc 40050cc8 cpsr 8000001004-15 11:06:53.869 I/DEBUG ( 1274): d0 0000000000000000 d1 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d2 0000000000000000 d3 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d4 0000000000000000 d5 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d6 0000000000000000 d7 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d8 400d9aa353e247de d9 401c3fb69984a0e504-15 11:06:53.869 I/DEBUG ( 1274): d10 412e848000000000 d11 408f40000000000004-15 11:06:53.869 I/DEBUG ( 1274): d12 3feccccccccccccd d13 405900000000000004-15 11:06:53.869 I/DEBUG ( 1274): d14 3fb9999999999998 d15 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d16 0000000000000000 d17 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d18 0000000000000000 d19 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d20 0000000000000000 d21 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d22 0000000000000000 d23 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d24 0000000000000000 d25 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d26 0000000000000000 d27 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d28 0000000000000000 d29 000000000000000004-15 11:06:53.869 I/DEBUG ( 1274): d30 ffffffffffffffff d31 ffffffffffffffff04-15 11:06:53.869 I/DEBUG ( 1274): scr 60000012里面应该有挂掉的堆栈,然后栈顶就是最后挂掉的地方,还有用addr2line 必须是符号库文件,也就是obj目录下的,而不是libs目录 没有啊,我只看到了Fatal signal 11 (SIGSEGV) at XXXXX,没有看到像你切图那样的东西哦这是我Eclipse中提示的打印信息,为什么我的没有像你切图里面Debug信息 搜寻了一下,可以用Android ndk-stack tool来查看产生这个错误的原因,但是出错的时候我的Eclipse中没有看到有*号开始的那些提示信息我是用真机测试的,在工程目录下的jni文件夹下Application.mk中添加 APP_OPTIM := debug,我的C文件是用NDK-BUILD编译的 我用了最笨的方法来找是哪一行代码出了问题,所以加了很多的打印信息,在Fatal signal 11出现的时候,前后的打印信息是连着的,比如if (play->m_vo_ctx) { LOGE("before free_video_render1 exist!!"); free_video_render(play->m_vo_ctx); LOGE("after free_video_render1 exist!!"); play->m_vo_ctx = NULL; } if (bFreeThread) { bFreeThread = FALSE; JavaVM *av2_vm = av_get_jvm(); (*av2_vm)->DetachCurrentThread(av2_vm); LOGE("DetachCurrentThread 3 exit!!"); } LOGE("video_render_thrd exist!!");当打印完after free_video_render1 exist!!后就抱错了,但是后面的DetachCurrentThread 3 exit!!跟video_render_thrd exist!!还在继续打印,如上图所示,测试了很多次,报这个错误的时候有可能在打印完av_stop 3跟av_stop 4之间,或者其它的打印信息之间,但是这两句打印信息之间并没有什么错误,所以都不知道怎么确定到底是哪里的代码出了问题了 前辈说的LOG,是Eclipse中的LogCat 还是? 前辈说的LOG,是Eclipse中的LogCat 还是?Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全 前辈说的LOG,是Eclipse中的LogCat 还是?Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全前辈说的adb logcat是指的什么?我可以试试看 前辈说的LOG,是Eclipse中的LogCat 还是?Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全adb logcat是在Eclipse中设置么 选择All messages确实可以看见这个,我的动态库文件是libavplayer.so,图片中选中的那一句是不是就是报的错误函数,工程中确实也有update_textures_with_yuv这个函数 window->show views->logcat那就是Eclipse中的LogCat了 很明显,挂掉的地方在libavplayer.so 定位00140160即可知道 哪一行出问题 我已经把这些错误导出成了一个TXT文件前辈说的LOG,是Eclipse中的LogCat 还是?Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全我已经吧这些错误导出成了一个TXT文件,然后按照这个方法执行$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump log.txtlog.txt是导出的出错文件,我吧这个文件放到了NDK目录下面,然后在NDK中执行ndk-stack -sym E:/myEclipseWorkPlace/Android_855play/obj/local/armeabi -dump log.txt分析出来的结果跟程序一点关系都没有 很明显,挂掉的地方在libavplayer.so 定位00140160即可知道 哪一行出问题如何定位很明显,挂掉的地方在libavplayer.so 定位00140160即可知道 哪一行出问题谢谢前辈的指点,用这个命令确实可以addr2line -e E:/myEclipseWorkPlace/Android_855play/obj/local/armeabi/libavplayer.so 00140160不过不知道为什么,我用Android ndk-stack,定位不了 android xml 文件错误 listview按钮的位置 关于android 手机与手机之间传输 请问:怎样在不同的Activity里传递数据? 关于Android短信的问题 全屏的时候,软键盘上弹,界面往上移,如何解决这问题 关于安卓的问题 安卓欢迎页图片怎么改变 Android 请教:如何判断应用已经设置了“允许后台运行”(或者是白名单) Android SDK中MediaPlayer播放器prepareAsync准备时间的问题,求指教 setDisplayHomeAsUpEnabled(true); 为什么没有反应= =
是不是我这样的方式不对,我的SO文件是几个静态的a文件编译后产生的SO文件
里面应该有挂掉的堆栈,然后栈顶就是最后挂掉的地方,还有用addr2line 必须是符号库文件,也就是obj目录下的,而不是libs目录
这是我Eclipse中提示的打印信息,为什么我的没有像你切图里面Debug信息
搜寻了一下,可以用Android ndk-stack tool
来查看产生这个错误的原因,但是出错的时候我的Eclipse中没有看到有*号开始的那些提示信息我是用真机测试的,在工程目录下的jni文件夹下Application.mk中添加 APP_OPTIM := debug,我的C文件是用NDK-BUILD编译的
if (play->m_vo_ctx)
{
LOGE("before free_video_render1 exist!!");
free_video_render(play->m_vo_ctx);
LOGE("after free_video_render1 exist!!");
play->m_vo_ctx = NULL;
} if (bFreeThread)
{
bFreeThread = FALSE;
JavaVM *av2_vm = av_get_jvm();
(*av2_vm)->DetachCurrentThread(av2_vm);
LOGE("DetachCurrentThread 3 exit!!");
}
LOGE("video_render_thrd exist!!");当打印完after free_video_render1 exist!!后就抱错了,但是后面的DetachCurrentThread 3 exit!!跟video_render_thrd exist!!还在继续打印,如上图所示,测试了很多次,报这个错误的时候有可能在打印完av_stop 3跟av_stop 4之间,或者其它的打印信息之间,但是这两句打印信息之间并没有什么错误,所以都不知道怎么确定到底是哪里的代码出了问题了
Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
前辈说的adb logcat是指的什么?我可以试试看
Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
adb logcat是在Eclipse中设置么
选择All messages确实可以看见这个,我的动态库文件是libavplayer.so,图片中选中的那一句是不是就是报的错误函数,工程中确实也有update_textures_with_yuv这个函数
那就是Eclipse中的LogCat了
Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
我已经吧这些错误导出成了一个TXT文件,然后按照这个方法执行
$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump log.txtlog.txt是导出的出错文件,我吧这个文件放到了NDK目录下面,然后在NDK中执行
ndk-stack -sym E:/myEclipseWorkPlace/Android_855play/obj/local/armeabi -dump log.txt分析出来的结果跟程序一点关系都没有
如何定位很明显,挂掉的地方在libavplayer.so 定位00140160即可知道 哪一行出问题
谢谢前辈的指点,用这个命令确实可以
addr2line -e E:/myEclipseWorkPlace/Android_855play/obj/local/armeabi/libavplayer.so 00140160不过不知道为什么,我用Android ndk-stack,定位不了