热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux下配置ndk路径,NDK调试armlinuxandroideabiaddr2line工具的使用

作用arm-linux-androideabi-addr2line看工具名称就知道是将内存地址转换成行号,具体点就是根据so库抛出的Error日志的中内存地址

作用

arm-linux-androideabi-addr2line看工具名称就知道是将内存地址转换成行号,具体点就是根据so库抛出的Error日志的中内存地址,找到具体是在那个文件的哪一行出现的该错误。

环境

Windows7-x64 + Android Studio2.2+

环境变量配置

配置arm-linux-androideabi-addr2line环境变量,工具所在目录:ndk目录下的toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin,版本可能不一样(此步骤可以省略,当然不配置的话,每次命令行工具都得切换到该工具目录下才可运行)

实例

某次开发ndk发生如下错误,我想知道具体是在哪个源文件的哪一行发生的:

a5bf31cc051df5286abca401e0452299.png

这里写图片描述

这个时候就可以使用arm-linux-androideabi-addr2line工具进行定位

命令格式:

arm-linux-androideabi-addr2line -e 需要调试的so库路径 内存地址

比如定位上图发生的这个错误:

内存地址为:00002c6f

所以在命令行工具运行:

arm-linux-androideabi-addr2line -e

F:\workspace\FFmpegDemo\app\build\intermediates\cmake\debug\obj\armeabi\libffmpeg-lib.so 00002c6f

控制台输出:

F:\workspace\FFmpegDemo\app\src\main\cpp/ffmpeg-media.c:223

【有图有真相】

4a8d82c6b3f48de0c8b2fe6db5a12711.png

这里写图片描述

我们可以看到错误的位置位于ffmpeg-media.c源文件的223行。

tips:本示例这里发生这个错误是由于JNI中使用多线程没有把需要跨线程访问的类对象定义成全局引用而造成的。

需要注意的地方

本示例是在Windows7下Android Studio中使用cmake编译打包的so库,默认输出so库的位置位于项目下

xxx\app\build\intermediates\cmake\debug\obj\armeabi目录,如果实在Linux中使用该命令需要把\转换成/

在Windows中经过实验转不转换都可以。



推荐阅读
author-avatar
好人民看到了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有