美文网首页
使用addr2line命令定位到行号解析.so的文件

使用addr2line命令定位到行号解析.so的文件

作者: 超__越 | 来源:发表于2020-01-10 22:08 被阅读0次

一、背景

最新遇到crash 的问题 ,这里来简单说明怎么使用addr2line 命令来定位问题

首先获取到tombstone log

找到出现的位置如下log 

Process Name: 'UNKNOWN'

Thread Name: ''

pid: 3124, tid: 3124  >>> UNKNOWN <<<

killed by pid: 1, comm: UNKNOWN, uid: 0.

signal 15 (SIGTERM), code 0 (?), fault addr --------

r0 fffffffc  r1 ffd0e538  r2 00000010  r3 00007b20

r4 00000000  r5 00000008  r6 00000000  r7 0000015a

r8 f2ab269c  r9 00000008  10 f2ab2650  fp 00007b20

ip ffd0e4d0  sp ffd0e4c0  lr f2e33339  pc f2e605a0  cpsr 20070010

#00  pc 000485a0  /system/lib/libc.so

#00  pc 000485a0  /system/lib/libc.so

#01  lr 0001b339  /system/lib/libc.so

 --- --- ---

[DEBUG] Read self maps instead! map: 0x0

00 pc 000485a0  /system/lib/libc.so (__epoll_pwait+20)

01 pc 0001b337  /system/lib/libc.so (epoll_pwait+38)

 --- --- --- ---

从上面我们可以看到出现问题的在libc.so 这个库文件

二、找到对应的库文件

一版系统编译的这些库都会放到 

\out\target\product\product_name\system\lib\下面  

对应的在out\target\product\product_name\symbols\system\lib\也有一个

我们需要解析是在这个目录下的out\target\product\product_name\symbols\system\lib\的库文件

三、使用addr2line工具分析

这个工具在不同的android 平台上,放置的位置和名称有些区别

anroid 7.0 

prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line

prebuilts\gcc\darwin-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line

如:android 8.1 位置如下

prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line

android 9.0 位置在 

\prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line

我们今天分析是在8.1上面对应的位置为:

prebuilts\gcc\linux-x86\aarch64\aarch64-linux-android-4.9\bin\aarch64-linux-android-addr2line

四、操作步骤

a、我们以andriod 8.1 的为案例:

首先切换到代码的根目录:

如 anroid_home#

b、使用命令定位

使用命令 aarch64-linux-android-addr2line -f -e  +库名称 +地址

上面的地址为: 000485a0   000485a0  

 0001b339   0001b337  

c、结果显示

$ ./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e out/target/product/msm8953_64/symbols/system/lib/libc.so 000485a0

__epoll_pwait

/proc/self/cwd/bionic/libc/arch-arm/syscalls/__epoll_pwait.S:16

 ./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e out/target/product/msm8953_64/symbols/system/lib/libc.so 0001b339

epoll_pwait

bionic/libc/bionic/epoll_pwait.cpp:?

./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e out/target/product/msm8953_64/symbols/system/lib/libc.so 0001b337

epoll_pwait

bionic/libc/bionic/epoll_pwait.cpp:42

五、结果分析

通解析库文件--找源码的位置-分析源码

找出问题的根源。

相关文章

  • 使用addr2line命令定位到行号解析.so的文件

    一、背景 最新遇到crash 的问题 ,这里来简单说明怎么使用addr2line 命令来定位问题 首先获取到tom...

  • 每日一个linux命令10-ln

    1. 命令解析 命令用途: 将文件内容输出到标准输出,并添加上行号;若没有指定文件,或指定的文件名为-则读取标准输...

  • Vim常用命令

    misc 替换命令使用 打开多个文件 行号 visual块操作 高亮取消 快速移动

  • cat命令使用总结

    简介 cat命令常用来显示文件的内容。 命令格式 使用实例 输出文件内容 输出文件内容 并显示行号 输出文件内容 ...

  • Linux命令学习之:nl命令

    Linux命令学习之:nl命令 nl命令在linux中用来计算文件中的行号。nl可以将输出的文件内容自动加上行号,...

  • Linux初级阶段之常用命令:nl

    1. 命令格式: nl [选项]... [文件]... 2. 命令功能: nl行号过滤器,用来计算文件中行号,其默...

  • GNU Binutils之addr2line命令

    本文主要介绍addr2line命令的用法。 一、命令介绍 addr2line命令是GNU Binutils工具集中...

  • Android-百度定位API使用方法

    百度定位API使用方法 导入库文件 在下载页面下载最新的库文件。将liblocSDK2.4.so文件拷贝到libs...

  • vim学习 07——跳转缩进

    vim学习 07——跳转缩进 查看文件信息 Ctrl + g 跳转 行号 + G : + 行号,然后回车 定位括号...

  • vim显示行号

    当我们使用vim打开文件时,默认是不显示行号的,然后有很多的命令,需要使用到行号,这个时候有两种解决方案,一种是一...

网友评论

      本文标题:使用addr2line命令定位到行号解析.so的文件

      本文链接:https://www.haomeiwen.com/subject/srypactx.html