addr2line查看死机代码的位置

Linux系统之addr2line命令详解 addr2line 是一个 GNU 工具,用于将程序地址转换为文件名和行号信息。它通常用于调试目的,特别是有程序崩溃生成的核心转储(core dump)或性能分析工具输出的地址时,addr2line 可以帮助确定这些地址对应的源代码位置。这对于定位和修复错误非常有用。 阅读详情
Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。这种功能对于追踪死机地址转换成源码位置很有意义。
      在调用 Addr2line 工具时,要使用  -e  选项来指定可执行映像是  test, 通过使用  -f  选项,可以告诉工具输出函数名。
例如:addr2line -e test   0x1234654(死机地址)  -f 

      这个工具在我们日常开发中非常有用。他可以快速的定位到程序死机的位置。注意,这里说的死机是指程序因为非法地址访问,除数为0,地址未对其访问(部分平台有此限制),bus error等错误造成的程序崩溃。不包含死锁、程序死循环等造成的死机现象。

在说明该工具的用法之前,先了解两个概念:
     1. epc:在学校我们学习汇编的时候知道pc是CPU保存当前运行指令地址的寄存器,那么这个 epc就是error pc。保存的是当程序崩溃时,造成指令异常的那条指令的地址。也就是问题的第一现场。比如,程序因为非法地址访问造成了死机,那么epc保存的就是直接造成非法地址访问的那条指令的地址。
     2. ra:当前程序返回地址。当程序进行函数调用时更新该寄存器。当程序死机时,该地址就是第二现场。
        一般程序崩溃时都有epc、ra的地址打印出来。

addr2line实例
命令:addr2line -e integration/product/a.out 802f07a8 –f
其中integration/product/a.out为造成死机对应的程序。 802f07a8 为地址。比如上面一张所说的epc地址或者是ra地址。

待查地址的确定?
有时出现的是fault add 地址,有时出现的是epc地址( exception地址)或者pc地址(通常是指向函数的地址),针对fault add地址,此处假设该为 0x00250465,而有没有堆栈,则可以先通过查看进程的内存映射信息,定位到地址所在的映像文件(动态库or可执行文件)所在的位置。

cat /proc/PID/maps 查看内存信息,例如:
[root@rhel5 ~]# cat /proc/2674/maps 
00110000-00239000 r-xp 00000000 08:02 130647     /lib/libcrypto.so.0.9.8e
00239000-0024c000 rwxp 00129000 08:02 130647     /lib/libcrypto.so.0.9.8e
0024c000-00250000 rwxp 0024c000 00:00 0 
00250000-00252000 r-xp 00000000 08:02 130462     /lib/mylib-2.5.so
00252000-00253000 r-xp 00001000 08:02 130462     /lib/mylib.so
找到对应的地址区间和映像(库)之后,然后利用fault addr地址和该库地址区间计算出,该死机地址在该库中的偏移地址。接着使用addr2line 来定位该地址的所在的代码位置。

使用此命令时有几个条件:
(1)test 可执行文件在gcc编译时必须包含-g选项;
(2)(死机)地址的确定;

相关示例:


http://blog.youkuaiyun.com/whz_zb/article/details/7604760


转自:http://blog.youkuaiyun.com/kehyuanyu/article/details/37668195

使用addr2line定位死机 CmBacktrace 甚至连排查命令都帮你生成好了:你只需要: 阅读详情

相关推荐

从LR寄存器到代码行:手把手教你用cm_backtrace和addr2line解析MCU死机堆栈

本文详细介绍了如何利用cm_backtrace和addr2line工具解析MCU死机堆栈,从LR寄存器到具体代码行的完整流程。通过分析ARM Cortex-M内核的HardFault关键寄存器信息,结合GNU工具链进行离线分析,帮助开发者快速定位死机问题根源,提升嵌入式设备故障排查效率。

weixin_33217202的博客 266

addr2line

一、addr2line 用addr2line可以将函数地址解析为函数名,在Linux下用C/C++的程序,可以使用addr2line根据地址获取到对应的代码行。 这是一个示例程序,func函数返回参数a除以参数b的结果。这里使用0作为除数,结果就是程序因为除以0导致错误,直接中断了。 #include <stdio.h> int func(int a, int b) { return a / b; } int main() { int x = 10; int y =

u013827488的博客 1万+

STM32异常地址追踪:addr2line.exe实战解析

本文详细解析了如何使用addr2line.exe工具追踪STM32异常地址,帮助开发者快速定位嵌入式设备崩溃问题。通过实战案例和高级技巧,展示了如何获取异常地址、准备调试文件以及解析具体代码位置,大幅提升调试效率。特别适合处理难以复现的嵌入式系统故障。

weixin_30443747的博客 253

Linux调试工具 | Addr2line

通过addr2line的描述可知,在使用addr2line将地址转换为函数、文件名或行号时,其有两种使用方法:即对于可执行文件,addr2line后直接跟十六进制的地址值;对于可重定位对象文件,addr2line后直接跟十六进制的地址偏移量。从而实现正确输出需要的信息,否则会导致地址无法解析,输出??:0。提示:可通过file命令区分可执行文件与可重定位对象#输出executable,可知文件是可执行文件#输出relocatable,可知文件是可重定位对象。

qq_43416206的博客 9991

恒玄BES平台死机日志全解析:如何快速定位崩溃原因

本文深入解析恒玄BES平台死机日志的分析方法,帮助开发者快速定位系统崩溃原因。从日志结构解析到实战排查技巧,详细介绍了寄存器解读、地址定位和常见崩溃模式,并提供了高级调试技巧和预防性编程策略,助力提升嵌入式开发效率。

weixin_30687051的博客 393

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

addr2line快速定位进程异常位置

通过addr2line工具快速定位到C/C++程序出错的位置,方便查找问题根因

u013357557的专栏 8706

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程

看过我博客的会发现我写了很多CESM的笔记,但是说实话,平时科研我其实更多时候是GEOS-Chemuser。之所以写了很多CESM笔记,其实是因为不会,就边学边写。然后GEOS-Chem已经用比较熟了,所以也没想过做笔记啥的。但是我发现越来越多朋友私信我各种CESM问题,我觉得我可能给大家营造了一种我是CESM达人的错觉。感觉自己有点跑偏了呢。公平起见,我觉得我有必要补充点GEOS-Chem笔记。 GEOS-Chem是研究大气化学的人常用的大气化学传输模式,在全世界范围的大气化学研究组中被广泛使用。不过.

砍柴姑娘Jourosy的博客 1万+

Linux下addr2line命令用法

Linux下addr2line命令用于将程序指令地址转换为所对应的函数名、以及函数所在的源文件名和行号。当含有调试信息(-g)的执行程序出现crash时(core dumped),可使用addr2line命令快速定位出错的位置。 如果无法确定文件名或函数名,addr2line将在它们的位置打印两个问号;如果无法确定行号,addr2line将打印0或一个问号。 参数说明: (1).-a:在函数名、文件名和行号信息之前,以十六进制形式显示地址。 ...

网络资源是无限的 6万+

从电商平台到微信私域:构建合规跳转链路的技术实现

在互联网营销与用户增长领域,链接跳转是连接不同平台、引导用户流量的基础技术。其核心原理是通过服务器端路由与参数解析,实现用户请求的接收、处理与重定向。这项技术的价值在于能够突破平台间的生态壁垒,实现流量的合规、可控迁移,尤其适用于跨平台营销、私域沉淀等场景。在实际应用中,常需处理微信环境限制、参数传递与动态内容生成等挑战。本文聚焦于电商平台(如淘宝)到微信生态的跳转需求,详细阐述了如何利用Node.js、Express框架及二维码生成技术,构建一个包含环境检测、参数传递与动态落地页的完整跳转系统,以解决微信

weixin_33889665的博客 323

Python头歌实验题目(2024版)

武汉理工大学头歌平台实验题目

2401_84152595的博客 2万+

用 addr2line 定位 OOPS 死机代码位置

1. 一般 OOPS 死机时内核的 LOG kmsg 中会出现些函数地址等信息。比如下面的信息。      2. 执行 android代码包中的addr2line bin文件,比如文件 ./prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-addr2line     (1). 如果不确定addr2line的具体名称,可以用 gr

fuyongming的专栏 1477

R语言导入.dta文件实战

R语言导入.dta文件实战 #导入.dta文件的基本语法 R的导入.dta文件最简单方法是使用haven库中的read_dta()函数。 此函数使用以下基本语法: data <- read_dta('C:/you-path/file_name.dta') #包的安装和导入 install.packages('haven') library(haven) #下载.dta数据文件 我们将从该页面下载名为cola.dta的.dta文件。 #导入.dta文件 ..

data+scenario+science+insight 1万+

常见死机定位方法gdb addr2line objdump

常见死机定位方法 Gdb addr2line objdump

Bgm_Nilbb的博客 1841

2024美团秋招硬件开发笔试真题及答案解析

在 Linux 内核的网络设备驱动中,数据链路层的功能通常由网络协议栈的低层(如以太网驱动)实现,而不是作为网络设备驱动的一个独立层次。在 FreeRTOS 中,任务通知(Task Notifications)是一种轻量级的事件传递机制,用于在任务之间或任务与中断之间传递信号。小美正在开发一个简单的密码生成器,其中一个功能是将输入的字符串中的所有字母按字母顺序循环前移一位(即 'a' 变为 'z','B' 变为 'A',以此类推)。它包含了网络设备的各种参数和方法,用于管理网络设备的初始化、配置和操作。

XU157303764的博客 1675

【人工智能】向量数据库全生命周期数据安全防护体系:破解向量化与检索双环节泄露风险

大模型时代,向量数据库已成为RAG(检索增强生成)架构、语义检索、多模态应用的核心基础设施,解决了大模型幻觉、长上下文窗口限制、私有知识落地等核心痛点。但行业普遍存在认知误区:将Embedding向量等同于“无害的语义压缩乱码”,忽视了向量数据原生的泄露风险。

奶爸的编程之路,也就一周冷个三天 157

android 动态库死机调试方法

android 动态库死机调试方法 分类: Android系统框架学习 2011-12-15 17:47 1468人阅读 评论(1) 收藏 举报 这两种方法都不是我发明了,都是网上一些高手公共出来的调试方法,无奈找不到出处的地方了,所以就在此总结一下,以方便android下的调试: 简要说明: android系统中调试Java非常容易,一般遇到错误都在lo

manshq163com的专栏 567

LeetCode 面试经典 150 题回顾

最经典 150 题,掌握面试所有知识点 面试经典 150 题 : 题目分析、解题思路、复杂度分析、代码展示

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 8万+

Linux addr2line介绍

Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。这在应用程序和内核程序执行过程中出现崩溃时,可用于快速定位出出错的位置,进而找出代码的bug。一般适用于 debug 版本或带有 symbol 信息的库。

l00102795的博客 1381

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

无core文件时应用addr2line定位死机位置

在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。 有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,如何知道

1312

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

addr2line精准定位崩溃位置

成功使用。

2403_83632450的博客 502

别再只会看寄存器了!用Ozone和Keil双剑合璧,精准定位MCU死机现场

本文详细介绍了如何利用Ozone和Keil工具组合,构建非侵入式调试环境,精准定位MCU死机现场。通过寄存器取证、内存分析和调用栈重建等技术,帮助开发者快速诊断死机原因,提升调试效率。适用于ARM Cortex-M系列MCU的故障排查。

weixin_28728425的博客 333

空指针 引起的死机

第一类:java中的 空指针 随便在哪,用下空指针,在ddms log中都能打印出具体位置来,很好分析;界面上只是打印个异常提醒; 第二类:native 中使用空指针 ---WebCoreFrameBridge.cpp文件LoadData函数 pFrame = NULL;--add 1.界面上没有提示,只是闪立下,回到之前操作界面;通过ddms观察,应用已经重启立; 2.

persuit的专栏 3895

gdb结合coredump定位死机问题(包含动态库)

(Fatal Signals)中带有 "core dump" 标志的,才会触发 core 文件生成。是当程序异常崩溃(如段错误、非法指令等)时,操作系统保存下来的。// 触发 SIGABRT。(如果开启了 core dump 功能)。打印 backtrace(调用栈)执行非法指令(如指针跳转错误)查看所有线程的调用栈(多线程)键盘 quit(Ctrl+\)强制终止进程(无法捕获、阻止)程序主动调用 abort()调用 abort() 函数。温和终止(kill 默认)

weixin_40820983的博客 866
上一篇: MPEG2-TS音视频同步原理
下一篇: 解密淘宝优惠群泛滥的原因
simonjay2007
博客等级 码龄17年 104粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值