解决方案 »

  1.   

    lz,真牛B,SO文件也弄,这样会累死的
      

  2.   

    你都说是一个so动态库了,怎么可能通过一个地址能够得到具体代码的行数呢
    动态库每次加载到不同的地址,你这么作是不行的
    最简单的做法就是,如果有工作正常的版本,看因为啥改动成了这样
    如果不行,只能用gdb之类的调试了吧,不过我没做过
      

  3.   

    libsyjt.so 这个库如果是带符号表的, 那用addr2line 就可以定位行号, 你显示 ?? 因为已经把符号表删掉了, 那样库的size会小点。
    含符号表的lib, 编译后会放到out/target/product/<Your product name>/symbols/system/lib
      

  4.   

    确定LOG中打印出来用的LIB和你addr2line 中用的符号库是对应关系
      

  5.   

    有个工具叫 stack ,专门分析这种的。
    使用方法也很简单,前提是你要有这个版本的编译环境和symbol即可,如果需要楼主给我留邮箱我发给你。
      

  6.   

    关键是如何获取so的基地址的问题, 我也不懂如何获取,  请问楼上的obj/local/armeabi/libsyjt.so这个目录中的so应该是有符号的, 难还要通过什么编译选项打开符号表的生成功能吗?
      

  7.   

    关于Android JNI 编程如何定位段错误的问题(addr2line的使用):
    1.普通的应用程序或者静动态库,如果你想用addr2line 来定位段错误出在哪一行,请记住在编译它们的时候一定加上编译选项 -g 它会生成symbols信息 在你的exe or lib 里面。
    2.NDK编译生成静动态库就没有必要在Android.mk的编译选项里面加-g了,应为ndk默认就会生成symbols,这个是我做实验得出来的结论。