精华内容
参与话题
问答
  • linux中或者android端使用addr2line命令定位代码出错的代码所在行,但有时候addr2line定位输出为??:?。并不能分析出哪行代码出了问题,例如,addr2line -e a.out 0x4005BDC命令。也可以使用valgrind工具运行此a....

    linux中或者android端使用addr2line命令定位代码出错的代码所在行,但有时候addr2line定位输出为??:?。并不能分析出哪行代码出了问题,例如,addr2line -e a.out 0x4005BDC命令。也可以使用valgrind工具运行此a.out可执行文件时获取此地址以查找内存泄漏。

    addr2line - 将地址转换为文件名和行号。

    addr2line常常会遇到下面的情况:

    $ addr2line -e a.out 0x400442 #offset in the `__start` function
    ??:?
    $ addr2line -e a.out 0x400536 #offset in the `main` function
    hello.c:21
    $ addr2line -e a.out 0x40054b -f #The last instruction of the `main` function
    main
    ??:?

    导致上面的情况主要是:

    1. 只有使用-g标志生成的代码段(这意味着该段具有调试信息)才能成功生成文件名和亚麻码信息。
    2. 并非所有使用-g标志编译的函数体的偏移量都将成功输出文件名和亚麻布。偏移量是函数指令之后的最后一条指令,但我们无法获取信息。
    3. 编译时不用使用-s标志,这个标志会去掉debug信息

    因此,如果使用addr2line定位出so库出错的行不会输出??:?,需要在编译的时候加上-g选项 

     上面是报错的信息,下面通过NDK的addr2line工具定位代码出错所在行

    结果发现是ocrnative.cpp的第115行出错导致的。 

     

    参考:https://www.thinbug.com/q/7648642

               https://www.thinbug.com/q/5314036

    展开全文
  • 如何使用arm-linux-androideabi-addr2line

    千次阅读 2014-03-30 12:53:23
    老是记不住,特转载一篇文章,以供后续使用。 原文:... arm-linux-androideabi-addr2line 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export PATH

    老是记不住,特转载一篇文章,以供后续使用。

    原文:http://blog.csdn.net/yanzheng1113/article/details/8148091

    arm-linux-androideabi-addr2line

    1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如:
    export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
    2.使配置生效:source ~/.bashrc
    3.使用工具。例如:

    arm-linux-androideabi-addr2line -C -f -e  ~/workspace/DLNA/libs/armeabi/libctrlpt.so 0003deb4
    其中,0003deb4为堆栈信息中pc的值。

    android应用崩溃的调试方法

    有两种方法可以分析 crash 的堆栈信息

    1 google提供了一个python脚本,可以从

    http://code.google.com/p/android-ndk-stacktrace-analyzer/
    下载这个python脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,
    使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面
    把so或exe转换成汇编代码,如:

    arm-eabi-objdump -S mylib.so > mylib.asm,
    使用脚本
    python parse_stack.py <asm-file> <logcat-file>

    2 直接使用NDK下面的arm-linux-androideabi-addr2line

    (D:\android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe)
    例如:

    arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address)

    android调试工具addr2line使用补充

    使用addr2line追踪自有动态库(so文件)的bug, 补充:
    解决出现 ??:0 , 没法展示源代码行数的问题
    在Android.mk 文件中:
    Java代码
        LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wl,-Map=test.map -g  
    补充2个编译参数  -Wl,-Map=test.map -g .

    增加gcc警告和调试标志

    arm-linux-androideabi-addr2line -C -f -e /项目目录/obj/local/armeabi/libfaa_jni.so 0024362e
    tip: 1,注意调试文件的位置在obj目录下,并非libs目录下生成的so文件
           2,0024362e 为出错的机制位置
    还有:
    在jni/目录下增加Application.mk 文件, 修改为debug 模式,进行调试 APP_OPTIM := debug
    具体application.mk 文件的配置见: http://blog.csdn.net/weidawei0609/article/details/6561280



    展开全文
  • 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin 2...

    1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如:

    export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin


    2.使配置生效:source ~/.bashrc


    3.使用工具。例如:arm-linux-androideabi-addr2line -C -f -e  ~/workspace/DLNA/libs/armeabi/libctrlpt.so 0003deb4

    其中,0003deb4为堆栈信息中pc的值。





    展开全文
  • 如何使用addr2line命令解析native backtrace内容 (2018-01-26)[DESCRIPTION]有时遇到ANR问题,查看SWT_JBT_TRACES文件,发现有些是native backtrace,且GAT-LogView目前无法解析这种不规则的native backtrace。...
    如何使用addr2line命令解析native backtrace


    有时遇到ANR问题,查看SWT_JBT_TRACES文件,发现有些是native backtrace,且GAT-LogView目前无法解析这种不规则的native backtrace。
    这时可以找到带symbols信息的对应lib库,使用addr2line解析pc指针,就可以得到native backtrace对应的代码行号。
     
    解决方法:
    带symbols信息的lib库位于out/target/product/{ProjectName}/symbols/system/lib/
    注意:带symbols信息的lib库必须是与复现问题的手机bin档同一次build出来的才可以,必须是位于out/target/product/{ProjectName}/symbols/system/lib/这个目录下的lib库才可以,
    从手机system/lib下adb pull出来的lib库不可以用来解析pc指针
     
    Q:如何check lib库是否带有symbols?
    A:将lib库copy到linux 开发环境下,在linux Terminal(终端命令行窗口)里面通过file命令来check:
    file libhwui.so
    若印出的信息后面带有not stripped,则是带symbols信息;
    若是stripped,则不带symbols信息;
     
    addr2line使用方法:
    步骤一:将需要解析的backtrace对应的lib库拷贝到android gcc目录下
    若是64位lib库,将带symbols信息的lib库拷贝到任意一份Android L及以上版本的代码路径下:platform(alps)/prebuilts/gcc/linux-x86/aarch64/cit-aarch64-linux-android-4.9/bin/
     
    若是32位的lib库,将带symbols信息的lib库拷贝到Android KK某版本对应代码下:
    platform(alps)/prebuilts/gcc/linux-x86/arm/cit-arm-linux-androideabi-4.8/bin/
     
    备注:黄色部分的路径不一定非要是cit开头的,在该目录下找一个版本最新的目录进去即可
     
    步骤二:用addr2line来逐行解析backtrace:
    例如SWT_JBT_TRACES里面某2行trace是:
    native: #02 pc 00077540  /system/lib64/libhwui.so
    native: #03 pc 00051d90  /system/lib64/libhwui.so
     
    那么如下命令就可以解析出上述trace的代码行号:
    addr2line -C -e libhwui.so -f 0x77540
     
    如下是上述2行trace的解析记录:
    [xxx@mszswglx07 bin]$addr2line -C -e libhwui.so -f 0x77540
    android::uirenderer::Task<android::uirenderer::VertexBuffer*>::getResult() const
    /home/jenkins/workspace/5918/build_chambal_cosmos/linux_repo/system/core/include/utils/Condition.h:106
     
    [xxx@mszswglx07 bin]$addr2line -C -e libhwui.so -f 0x51d90
    android::uirenderer::OpenGLRenderer::drawRoundRect(float, float, float, float, float, float, SkPaint const*)
    /home/jenkins/workspace/5918/build_chambal_cosmos/linux_repo/frameworks/base/libs/hwui/OpenGLRenderer.cpp:2660

    展开全文
  • 如何使用ndk中addr2line工具查询so库中错误信息行数。 jni现在在android项目中已经非常常见了,但是错误信息并不想android那样友好。 常见的c错误如下: 2020-03-12 12:13:49.055 10000-10372/...
  • addr2line objdump命令使用方法

    千次阅读 2015-08-27 20:47:45
    在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈...没有Core文件的时候,如何知道
  • 普通的应用程序或者静动态库,如果你想用addr2line 来定位段错误出在哪一行,请记住在编译它们的时候一定加上编译选项 -g 它会生成symbols信息 在你的exe or lib 里面。  2.NDK编译生成静动态库就没有必要在...
  • addr2line

    2017-06-03 10:30:06
    addr2line Usage: addr2line [option(s)] [addr(s)]  Convert addresses into line number/file name pairs.  If no addresses are specified on the command line, they will be read from stdin  The ...
  • Addr2line

    2013-12-30 10:17:28
    addr2line -C -f -e xxxx.so 0x0000xxxxx
  • 做安卓开发的同学对于tombstone问题应该是很熟悉了,但是对于如何排查和分析值得总结和整理的,这篇文章对入门安卓开发的技术来说是个入门指导,同时对安卓开发的中高级开发也有借鉴。 首先我们来说下什么是...
  • addr2line命令

    万次阅读 2019-03-13 20:42:56
    linux下addr2line工具事一个可以将指令的地址和可执行文件映像转换成文件名,函数名和源代码行数的工具。add2line独起来就是addr to line,即地址转换为行。 调试core dump常用:addr2line -e --exe=&lt;...
  • addr2line探秘

    万次阅读 2012-02-26 17:37:38
    addr2line探秘 在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的...

空空如也

1 2 3 4 5 ... 20
收藏数 1,622
精华内容 648
关键字:

addr2line