- 浏览: 212918 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (196)
- android (153)
- sqlite (1)
- java (3)
- os (4)
- tools (4)
- ResolveInfo 转 packageinf 取信息 (1)
- multimedia (2)
- fastboot (1)
- create user in samba (0)
- android qcn (0)
- windows (0)
- net (2)
- linux (1)
- git (0)
- proguard (0)
- android cpu (1)
- android gts (1)
- MySql (1)
- c/c++ (0)
- network (1)
- python (3)
- AI (1)
- Ultroedit (1)
- HarmonyOS NEXT (0)
From:
addr2line,可以根据一个地址打印出对应的代码行
addr2line,输入一个地址,指定一个带-g编译的可执行程序,就可以打印出该地址对应的代码行。
其实gdb也有这个功能,不过addr2line的好处是,很多时候,bug很难重现,我们手上只有一份crash log。这样就可以利用addr2line找到对应的代码行,很方便。前提条件是:
1. 该可执行程序用-g编译,带调试信息(所谓调试信息就是代码和地址的一个对应关系的信息)。
2. 如果crash在一个so里面,那addr2line不能直接给出代码行。因为我们都知道,so里面的地址在可执行文件装载的时候,是可以被 reallocate的。在windows核心编程中说dll的加载逻辑的时候,也提到过。所以,如果只有一个so的地址,要找出对应代码行的话,就要给 addr2line一个基地址和偏移量,或者根据可执行程序的smap信息,自己将这个地址转化成相对于so基地址的一个偏移地址才行。
Frome http://stackoverflow.com/questions/5314036/how-to-use-addr2line-in-android
Look at the last 3 lines; this is your callstack. 'pc' is the program counter, and the pc for stack frame #00 gives you the address where the crash occurred. This is the number to pass to addr2line.
I'm using NDK r5, so the executable I'm using is located at $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin; make sure that is in your $PATH. The command to use looks like
arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so <address>
addr2line,可以根据一个地址打印出对应的代码行
addr2line,输入一个地址,指定一个带-g编译的可执行程序,就可以打印出该地址对应的代码行。
其实gdb也有这个功能,不过addr2line的好处是,很多时候,bug很难重现,我们手上只有一份crash log。这样就可以利用addr2line找到对应的代码行,很方便。前提条件是:
1. 该可执行程序用-g编译,带调试信息(所谓调试信息就是代码和地址的一个对应关系的信息)。
2. 如果crash在一个so里面,那addr2line不能直接给出代码行。因为我们都知道,so里面的地址在可执行文件装载的时候,是可以被 reallocate的。在windows核心编程中说dll的加载逻辑的时候,也提到过。所以,如果只有一个so的地址,要找出对应代码行的话,就要给 addr2line一个基地址和偏移量,或者根据可执行程序的smap信息,自己将这个地址转化成相对于so基地址的一个偏移地址才行。
Frome http://stackoverflow.com/questions/5314036/how-to-use-addr2line-in-android
Look at the last 3 lines; this is your callstack. 'pc' is the program counter, and the pc for stack frame #00 gives you the address where the crash occurred. This is the number to pass to addr2line.
I'm using NDK r5, so the executable I'm using is located at $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin; make sure that is in your $PATH. The command to use looks like
arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so <address>
发表评论
-
Android SnappyDB
2018-05-15 11:23 908https://blog.csdn.net/qq_214305 ... -
使用UncaughtExceptionHandler保存全局异常(转)
2018-05-07 15:04 604From: https://blog.csdn.net/dre ... -
android udp
2018-04-10 19:47 566Android之Socket的基于UDP传输 接收方创建步骤: ... -
android DownloadManager
2018-04-10 12:52 553From: https://www.jianshu.com/p ... -
Snackbar 可以交互的Toast
2018-04-08 21:44 729Snackbar 是 Android design sup ... -
android 操作串口
2018-03-19 18:20 609http://blog.csdn.net/akunainian ... -
proguard对 android-support-v4.jar 的配置
2018-03-16 15:32 688-libraryjars libs/android-sup ... -
apk 多个dex
2018-03-16 10:05 968android studio 配置应用生成多个dex ... -
ddmlib 解决android n file explorer 为空问题
2018-03-16 09:27 890百度云:http://pan.baidu.com/s/1sl4 ... -
android 代码混淆
2018-03-15 08:38 1016打开混淆开关 Android.mk ... -
menu item 显示icon
2018-03-07 09:32 646@Override public boolean onMenu ... -
ubuntu 脚本切换root用户,并执行其它脚本
2018-03-05 09:58 0#!/bin/bash expect -c" ... -
DrawerLayout 滑动侧边栏
2018-03-01 10:42 0// TODO -
jack-server 多用户编译问题
2018-02-27 10:44 13993),需要同时修改 $HOME/.jack-server/co ... -
更新eclipse 遇到两个问题 Oxygen.2 Release (4.7.2)
2018-02-26 14:28 12131. the file dx.jar was not load ... -
监听系统开关变化
2018-02-05 14:02 804// 转屏开关 /** * Content obse ... -
android 8.0 模块编译命令
2018-02-02 14:42 1167Invoke ". build/envsetup.s ... -
svn checkout 忽略某个文件夹
2018-01-26 11:14 1354android源码更新时, frameworks\compil ... -
eclipse jni
2018-01-19 16:10 491试过,可以运行 http://blog.csdn.net/sb ... -
opencv for android
2018-01-19 14:37 415http://blog.csdn.net/sbsujjbcy/ ...
相关推荐
`addr2line`是Linux系统下一款非常实用的调试工具,它属于GNU Binutils的一部分,主要用于帮助开发者在遇到程序崩溃或者错误时,根据二进制文件(如动态链接库`.so`)中的内存地址,反向查找对应的源代码行号。...
《addr2line在x86平台上的应用与内存泄露检测》 在软件开发过程中,内存泄漏是一个常见的问题,它可能导致程序性能下降甚至崩溃。addr2line是GNU Binutils工具链中的一部分,它能够帮助开发者从内存地址反解析出...
tensa-esp32-elf-addr2line
addr2line 跨平台库,用于从具有DWARF调试信息的文件中检索每个地址的调试信息。 addr2line使用解析调试信息,并公开一个接口,用于查找源文件,行号以及目标程序中指令地址的包装函数。 这些查找可以通过Context:...
现在的软件源代码动则千万行,初学者常常感到迷惘,如果能自动生成关键函数的调用关系图,则思路可以清晰许多。如下面这幅图展示了WebKit网页渲染的部分函数执行过程,比单纯地看代码直观多了。...
addr2line.exe
免费 免费 感谢 https://github.com/armink/CmBacktrace/blob/master/tools/addr2line/win64/addr2line.exe
【保姆级IDF】ESP32调试利器:xtensa-esp32-elf-addr2line介绍、安装、使用
- `binutils`: 提供了用于处理二进制文件的工具,如addr2line、ar、elfedit等,这些工具在调试和分析程序时非常有用。 - `libstdc++`: 包含C++标准库,使得开发者可以使用C++语言进行开发,并且能够调用标准库函数...
在IT行业中,`addr2line`是一个非常重要的工具,它属于GNU Binutils的一部分,用于将程序内存地址转换为源代码中的行号和函数名。这个工具对于调试和分析二进制程序的行为尤其有用,因为它可以帮助开发者理解代码...
这里 `<executable>` 是产生内存泄漏的程序,`<relative_address>` 是LeakTracker报告中的相对地址,而`<ADDR2LINE_PATH>` 则指向addr2line的可执行文件。 优化脚本还可能包括并行处理多个内存泄漏地址,以提高分析...
3. **运行addr2line**:将PC寄存器的值作为参数传递给addr2line,命令格式大致为`addr2line -e 文件> <内存地址>`,其中文件>是你的目标程序的ELF文件,这是包含程序映射信息的文件。 4. **解析结果**:addr2line会...
3. **运行addr2line**:将PC寄存器的值作为参数传递给addr2line,命令格式大致为`addr2line -e 文件> <内存地址>`,其中文件>是你的目标程序的ELF文件,这是包含程序映射信息的文件。 4. **解析结果**:addr2line会...
3. **运行addr2line**:将PC寄存器的值作为参数传递给addr2line,命令格式大致为`addr2line -e 文件> <内存地址>`,其中文件>是你的目标程序的ELF文件,这是包含程序映射信息的文件。 4. **解析结果**:addr2line会...
`addr2line`工具是这种情况下的一种关键辅助工具,它能够将内存地址转换为源代码中的行号和文件名,帮助我们快速找到出错的位置。 首先,了解一些基础概念。ABI(Application Binary Interface)是指应用二进制接口...
3. **优化的addr2line脚本**:在实际应用中,由于不同环境下的addr2line路径可能不同,原生的脚本可能无法适应所有情况。LeakTracker通过允许配置addr2line路径,使得工具能够适应更多环境,增强了其在各种开发环境...
ESP32C3GCC编译器,即xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch2-win64,是专为ESP32C3系列微控制器设计的一款交叉编译工具链。这款编译器基于GCC(GNU Compiler Collection),版本为8.4.0,由Espressif Systems...
如果错误发生在静态库或不在动态库中的代码,我们可以直接使用`addr2line`命令,结合可执行文件名和偏移地址,来确定出错的源代码行。例如,如果`addr2line -e 可执行文件名 偏移地址`,它将打印出对应的源代码行。 ...
2. 解压:将下载的zip文件解压缩到本地目录。 3. 配置环境变量:为了在命令行中方便地使用这些工具,需要将解压后的路径添加到系统的PATH环境变量中。这通常涉及修改`~/.bashrc`(对于Linux或macOS)或`Environment ...
1.适用于STM32 Cortex-M7平台(别的平台只需稍加修改即可),可以选择输出到串口助手(默认),或输出到内存缓冲区,只要不掉电就不会丢失...配合addr2line工具,可非常方便的查找出系统内发生硬件错误hardfault的地方。