贴一下自己的在LogCat中的打印信息如下奇怪的是程序已经报错了,下面还有C写的打印信息,难道不是出错了JNI中的C代码马上就停止运行了吗

解决方案 »

  1.   

    我在我的SO文件下NDK中执行addr2line -e libavplayer.so 61b5c482后得到的结果是??:0
    是不是我这样的方式不对,我的SO文件是几个静态的a文件编译后产生的SO文件
      

  2.   

    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目录
      

  3.   

    没有啊,我只看到了Fatal signal 11 (SIGSEGV) at XXXXX,没有看到像你切图那样的东西哦
    这是我Eclipse中提示的打印信息,为什么我的没有像你切图里面Debug信息
      

  4.   


    搜寻了一下,可以用Android ndk-stack tool
    来查看产生这个错误的原因,但是出错的时候我的Eclipse中没有看到有*号开始的那些提示信息我是用真机测试的,在工程目录下的jni文件夹下Application.mk中添加 APP_OPTIM := debug,我的C文件是用NDK-BUILD编译的
      

  5.   

    我用了最笨的方法来找是哪一行代码出了问题,所以加了很多的打印信息,在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之间,或者其它的打印信息之间,但是这两句打印信息之间并没有什么错误,所以都不知道怎么确定到底是哪里的代码出了问题了
      

  6.   

    前辈说的LOG,是Eclipse中的LogCat 还是?
      

  7.   

    前辈说的LOG,是Eclipse中的LogCat 还是?
    Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
      

  8.   

    前辈说的LOG,是Eclipse中的LogCat 还是?
    Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
    前辈说的adb logcat是指的什么?我可以试试看
      

  9.   

    前辈说的LOG,是Eclipse中的LogCat 还是?
    Eclipse 中的log要选 All messages,不能采用过滤,不然就看不到了。最好直接用 adb logcat 来抓,这样比较全
    adb logcat是在Eclipse中设置么
      

  10.   


    选择All messages确实可以看见这个,我的动态库文件是libavplayer.so,图片中选中的那一句是不是就是报的错误函数,工程中确实也有update_textures_with_yuv这个函数
      

  11.   

    window->show views->logcat
    那就是Eclipse中的LogCat了
      

  12.   

    很明显,挂掉的地方在libavplayer.so  定位00140160即可知道 哪一行出问题
      

  13.   

    我已经把这些错误导出成了一个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分析出来的结果跟程序一点关系都没有
      

  14.   

    很明显,挂掉的地方在libavplayer.so  定位00140160即可知道 哪一行出问题
    如何定位很明显,挂掉的地方在libavplayer.so  定位00140160即可知道 哪一行出问题
    谢谢前辈的指点,用这个命令确实可以
    addr2line -e E:/myEclipseWorkPlace/Android_855play/obj/local/armeabi/libavplayer.so 00140160不过不知道为什么,我用Android ndk-stack,定位不了