首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    addr2line 动态库

    但是利用addr2line这个工具,就可以找到对应的代码行。前提条件是可执行程序或者动态链接库编译的时候带-g选项。 具体来说,分两种情况: 如果关注的一行backtrace位于一个可执行文件中,那么直接addr2line -e <executable>

    如果关注的backtrace位于一个动态链接库中 然后在这个文件中找到动态链接库的基地址,然后将backtrace中的地址 – 动态链接库的基地址,得到偏移地址offset address, 最后addr2line -e <shared library 不过相比addr2line,GDB需要将BUG现象重现一遍,所以对于不好重现的BUG,或是随机重现的BUG来说,使用addr2line就可以直接从backtrace找到对应的代码行,不需要重现现象,比GDB 有上面的认识后那我们就只需要得到此次libadd.so的加载地址然后用0x7f85839fa5c6这个地址减去libadd.so的加载地址得到的结果再利用addr2line命令就可以正确的得到出错的地方

    3.5K20编辑于 2022-11-15
  • 来自专栏悟空被FFmpeg玩

    addr2line使用小记

    [root@HI J]# arm-eabi-addr2line -e KERNEL_OBJ/vmlinux c0008520

    2K80发布于 2019-03-05
  • 来自专栏雪月清的随笔

    使用addr2line分析Native Crash

    常用的地址转换工具有addr2line、ndk-stack等,个人比较喜欢addr2line,所以接下来介绍下该工具的基本使用方式 addr2line简介 使用-h参数查看工具的可选参数配置 日常使用过程中 其中NDK中的aarch64-linux-android-c++fil(和addr2line同一个目录)是专门用来支持Demangle的 addr2line使用示例 新建一个带C++的Android Studio 工程,主动创造一个native crash 启动app后如预期崩溃 抓到崩溃信息后,根据ABI找到相对应的addr2line工具和带符号表的so文件。 我们主要关注backtrace后面的信息,同时带"pc"和"/data"的行基本就是app相关的崩溃行了 除了最后一个是被strip了符号的so,前三个so文件都是可以的 终端中使用addr2line

    2.8K11编辑于 2022-06-09
  • 来自专栏Android Camera开发

    Android 利用addr2line 定位 native crash问题

    addr2line bin文件,是在prebuilts目录下 ,如下所示,通过find -name aarch64-linux-android-addr2line 命令,能找的到64位bin文件所在的文件目录 使用命令如下: addr2line -C -f -e out/target/product/XXX/symbols/***.so 0000000000025494(堆栈地址) 注意so文件,得是symbols /product/xxx/symbols/vendor/lib/libcamxncs.so 接下来,就可以采用addr2line命令。 $ addr2line -C -f -e out/target/product/XXX/symbols/vendor/lib64/libcamxncs.so 000000000000e760 CamX: 【注意】在本地用addr2line命令定位代码时,要确保本地的代码和出问题的机器烧录版本的代码内容是一致的,这样定位才是准确的。

    1K10编辑于 2025-02-18
  • 来自专栏嵌入式Linux系统开发

    手把手教你用 addr2line 去 debug

    addr2line 就在这时派上用场。 这是一个示例程序,func 函数返回参数 a 除以参数 b 的结果。这里使用 0 作为除数,结果就是程序因为除以 0 导致错误,直接中断了。 使用 addr2line 就可以将 400534 地址转换出对应的文件及行数: 可知,程序在执行到 test.c 文件第五行的时候,执行出错,我们检查第五行代码。 return a / b; 这里除 0 肯定是不行的,addr2line 帮助我们找到了错误位置。 addr2line 用法 -a --addresses:在函数名、文件和行号信息之前,显示地址,以十六进制形式。 -b --target=:指定目标文件的格式为bfdname。

    6.2K11编辑于 2022-04-07
  • 来自专栏运维开发王义杰

    Go:配套工具addr2line,问题定位和性能优化利器

    addr2line的核心功能 addr2line 是Go语言配套工具集中的一个工具,它主要用于将程序的内存地址转换为对应的源代码位置。这在分析程序崩溃的堆栈跟踪或性能分析数据时非常有用。 通常,这些数据只提供内存地址,而通过使用 addr2line,开发者可以将这些地址映射回具体的代码行,从而更容易地理解和调试程序。 核心转储分析:分析核心转储文件时,addr2line 能帮助将地址映射回源代码,简化调试过程。 使用方法 使用 addr2line 的基本命令格式如下: bash go tool addr2line [options] binary 这里的 binary 是指已编译的Go程序的二进制文件。 后续我会继续研究,整理pprof和delve结合addr2line使用的文章,敬请关注!

    75110编辑于 2024-05-10
  • 来自专栏咖啡走糖

    linux内核调试工具-addr2line和gdb定位问题

    之前没有用过addr2line和gdb等内核调试工具定位问题代码,这里记录一下在将某个网络驱动从4.9内核移植到5.7内核时出现内核崩溃起不来的问题。 0000000000000000 [ 2.663929] x1 : 0000000000000000 x0 : 0000000000000000 [ 2.669191] Call trace: 1.通过addr2line 我用的编译链是aarch64-linux-gnu-,所以addr2line前面也要加这个前缀,这里一开始有个问题,我使用addr2line的时候没有输出代码行号,只输出两个"??"

    2.2K11编辑于 2022-11-05
  • 来自专栏韩曙亮的移动开发专栏

    【Android NDK 开发】NDK CC++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )

    文章目录 一、从 Tombstone 报错日志中查找报错动态库 二、addr2line 命令行工具使用 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工具 32 位动态库使用的 arm-linux-androideabi-addr2line.exe 工具 使用 addr2line 命令行工具分析动态库 Tombstone 报错信息日志文件被保存在了 /data 命令行工具进行确定 ; 二、addr2line 命令行工具使用 ---- 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工具 在 Android NDK 开发中 , 使用的 addr2line 命令行工具是在 SDK 的 ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86 arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin 目录下的 arm-linux-androideabi-addr2line.exe ; 使用 addr2line

    2.3K10编辑于 2023-03-30
  • 来自专栏字节流动

    写了个 AS 插件:SmartNDKStack,快速定位 Android Native 开发 Crash

    对于Android Native开发的人员而言,可能经常会在开发过程及线上环境中遇到Native Crash的问题,对于这类native crash,我们一般都会直接addr2line,或使用ndk中附带的 如何解析 常规操作 addr2line -Cfie libndkdemo.so 0xf0c8 网上的大部分教程都是直接进行如上的addr2line操作,对于自己开发过程中直接运行出现了crash的确可以快速定位 ,但如果代码已发生变更,库不匹配了,定位效率就会大幅下降,比如测试报了crash,但是本地代码已发生变更,库不匹配,如果想拿到build id相同的库,就要回退到当时的代码,重新编一个一样的库再做addr2line 本地库发生变更 修改其他函数,使crash所在的函数地址变更,变更后函数地址是0xf0a0,0xf0a0 + 0x34 = 0xf0d4使用新的地址addr2line,可以发现,此时buildId虽然发生变更

    2.5K60发布于 2021-11-26
  • 来自专栏后端开发技术

    从源头解决内存泄漏问题:全面解析内存泄漏检测与修复技术

    二、地址转换为符号信息2.1、addr2line工具将地址转换为文件名和行号。 addr2line有两种操作模式。在第一个命令行中,十六进制地址在命令行中指定,addr2line显示每个地址的文件名和行号。 在第二个命令中,addr2line从标准输入中读取十六进制地址,并在标准输出中打印每个地址的文件名和行号。在这种模式下,addr2line可以在管道中用于转换动态选择的地址。 addr2line只能看虚拟区域的地址。2.2、dladdr1()函数将地址转换为符号信息。 (5)当出现内存泄漏时,使用addr2line工具定位内存泄漏的位置。

    1.6K20编辑于 2024-10-13
  • 来自专栏linux驱动个人学习

    如何快速定位 Linux Panic 出错的代码行

    相应的工具有addr2line, gdb, objdump等,这几个工具在How to read a Linux kernel panic?都有介绍,我们将针对上面的实例做更具体的分析。 addr2line 如果出错的内核跟当前需要调试的内核一致,而且编译器等都一致,那么可以通过addr2line直接获取到出错的代码行,假设出错地址为0019594c: $ addr2line -e vmlinux_with_debug_info vmlinux_with_debug_info --start-address=0x0019594c --stop-address=$((0x0019594c+0x150)) 如果是情况二,也可以跟addr2line

    1.6K40编辑于 2023-09-10
  • 来自专栏字节流动

    Android NDK 开发中快速定位 Crash 问题

    addr2line 工具定位 addr2line 顾名思义,是内存地址转换成代码行号的工具。 NDK 中自带 addr2line ,一般位于以下目录中: //32bit D:\NDK\android-ndk-r16\toolchains\arm-linux-androideabi-4.9\prebuilt addr2line 是通过 pc (程序计数器)值来定位代码,“-e” 后加 .so 文件名,“-f”表示输出函数名。实际上从 log 中可以看到 AndroidStudio 自动帮我们做了这件事。 根据 .so 是 32 位还是 64 位选择对应的 addr2line 工具,执行 aarch64-linux-android-addr2line.exe -e <so 文件路径> -f <pc值> 另外在使用 addr2line 过程中经常会遇到 “??:?” 或 “??

    1.7K30发布于 2021-01-27
  • 来自专栏字节流动

    NDK 开发中快速定位 crash 问题

    addr2line 工具定位 addr2line 顾名思义,是内存地址转换成代码行号的工具。 NDK 中自带 addr2line ,一般位于以下目录中: //32bit D:\NDK\android-ndk-r16\toolchains\arm-linux-androideabi-4.9\prebuilt addr2line 是通过 pc (程序计数器)值来定位代码,“-e” 后加 .so 文件名,“-f”表示输出函数名。实际上从 log 中可以看到 AndroidStudio 自动帮我们做了这件事。 根据 .so 是 32 位还是 64 位选择对应的 addr2line 工具,执行 aarch64-linux-android-addr2line.exe -e <so 文件路径> -f <pc值> 另外在使用 addr2line 过程中经常会遇到 “??:?” 或 “??

    1.3K20发布于 2020-06-03
  • 来自专栏半生瓜のblog

    【Linux】直接打印堆栈调试信息

    signal(SIGABRT,handle_segv); return func(p); } 编译: gcc -g demo.c -o demo 执行: **找到错误代码行号:**使用addr2line 命令 示例: addr2line -a 0x4007b6 -e demo 回到我们的源文件,对应的位置。

    4.1K40编辑于 2023-05-13
  • 来自专栏Rust语言学习交流

    如何使用火焰图对 Rust 程序进行性能和内存占用分析

    替换更快的 add2line-rs git clone https://github.com/gimli-rs/addr2line cd addr2line cargo b --examples -r /target/release/examples/addr2line <your-addr2line-find-with-whereis-addr2line> 这样你的 jeprof 就会从 30 分钟飞速到

    2.9K10编辑于 2023-02-15
  • 鸿蒙5.0版开发:分析CppCrash(进程崩溃)

    使用addr2line工具:对于未能直接跳转的栈帧,可以使用addr2line工具将地址转换为代码行号。例如,使用以下命令:$ addr2line -Cpie . #09 pc 0000000000072128 /system/lib64/libc.so(__start_thread+68)...根据Reason可知为野指针,根据#01定位到具体的代码行有:$ addr2line

    91900编辑于 2024-11-13
  • 来自专栏逍遥剑客的游戏开发

    Android平台上的Native内存分析

    由于txt中保存的是内存地址, 而addr2line需要的是so的相对地址, 所以我们需要获取libUE.so的内存地址, 做个减法, 才能使用addr2line进行翻译. 有了so的相对地址, 就可以使用addr2line进行翻译了: arm-linux-androideabi-addr2line.exe -C -s -f -e libUE4.so [ADDRESS] 但是

    4.9K30发布于 2019-02-20
  • 来自专栏搜狗测试

    LeakTracer使用教程

    :0 排查原因,说明内存地址都是进程地址空间的绝对地址,动态链接库在每次加载是都可能被映射在进程内存地址空间的不同位置,因而addr2line无法根据符号的地址空间绝对地址转换到代码行数。 如果手动转换的话,需要先通过/proc/[pid]/maps找到我们的动态链接库映射的内存基地址,然后算出backtrace每个地址对应的动态链接库内部的偏移地址,再通过addr2line来将内存地址转换到代码文件的行号

    4K20发布于 2019-06-18
  • 来自专栏Golang语言社区

    linux后台开发常用调试工具

    获取二进制文件包含的字符串常量 strip 去除二进制文件包含的符号 readelf 显示目标文件详细信息 objdump 尽可能反汇编出源代码 addr2line addr2line(根据地址查找代码行) 当某个进程崩溃时,日志文件(/var/log/messages)中就会给出附加的信息,包括程序终止原因、故障地址,以及包含程序状态字(PSW)、通用寄存器和访问寄存器的简要寄存器转储 eg:Mar 31 11:34:28 l02 kernel: failing address: 0 如果可执行文件包括调试符号(带-g编译的),使用addr2line,可以确定哪一行代码导致了问题。 eg:addr2line –e exe addr 其实gdb也有这个功能,不过addr2line的好处是,很多时候,bug很难重现,我们手上只有一份crash log。 这样就可以利用addr2line找到对应的代码行,很方便。 注意: 1. 该可执行程序用-g编译,使之带调试信息。 2. 如果crash在一个so里面,那addr2line不能直接给出代码行。

    4.5K151发布于 2018-03-23
  • 来自专栏代码GG之家

    android native 代码内存泄露 定位方案

    p私有位 于是我们计算8cf84c54(代码的具体位置) -8cf84000(so的加载起始位置) =0xc54(so库中对应方法的地址) 我们使用addr2line找到这个地址的代码,这里可以看到是XXXXXXXtest_jni.c 这里有个小问题,按照ddms这个工具的本身意图,当我们配置好addr2line之后,配置好符号查找位置后,应该自动会解析成符号,而不是地址。 但是这里老是提示addr2line工具找不到,很是崩溃,无语,所以才有了上面的手动解析地址到方法的手段。 不过话说回来,这样子不是更学到了内容,还是值得高兴的事情。

    5.2K100发布于 2018-02-02
领券