异常信息转储笔记-获取源码行号

news2024/9/22 8:24:48

前情

上一篇笔记《异常信息转储预研笔记-堆栈地址转换》留下了两个待解决问题(如下图),问题1已在《异常信息转储笔记-demangle函数名字符》中解决,剩下问题2输出源码行号的问题还未能解决。

之前使用dladdr并未能将堆栈地址转换成源码行号,说明此路不通。

本文将尝试其他方案,成功与否,效果如何,将一一在此记录。

需求描述

在整个core信息转存下来的过程中,对实际应用中调试、定位和分析问题来说,最直观的就是根据堆栈调用中的函数名和源码行号来定位程序执行情况。

目前,已经成功输出了每个栈帧的指令地址、栈地址、函数名和寄存器状态等信息,独缺源文件行号。

待验证方案

根据了解,目前已知可能存在的方案有如下三个:

方案1、使用popen管道执行addr2line命令;

方案2、elfutils/libdwfl.h库中的dwfl_lineinfo方法;

方案3、GNU binutils中libbfd库;

验证过程

方案1

写了个demo,验证发现输出是??:0,可能原因是addr2line命令参数需要的是偏移地址,而不是栈帧的指令指针地址。

偏移地址需要计算,过程略复杂。

方案2

由于此方案需要编译安装三方库,故选择放在最后验证,看完方案1和3,没想到方案2是最后的救命稻草了。

项目官方地址:The elfutils project (sourceware.org)

先下载源码包吧。

下载完成,进入elfutils的源码;

运行配置脚本:./configure --disable-libdebuginfod --disable-debuginfod

编译安装:make && make install

默认应该会安装在/usr/local/下,安装完可以在/usr/local/include下确认一下有没有elfutils相关文件。

安装完上测试demo:

编译参数别忘了添加-ldw来链接libdw库;

经测试,方案可行;

但是不知道为啥,一些基础库能显示文件名和行号,但是自己编的代码却不显示。

方案3

经过了解,发现libbfd库主要对二进制文件进行操作,并不符合当前需求。

整个垮掉了。

题外

目前除了已知的libunwind和google的coredumper项目,还有boost似乎也提供stacktrace。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CourseGPT彻底改变本科学习

文章介绍了CourseGPT这一生成式AI工具,它基于Mistral AI的大型语言模型,旨在通过提供持续的教师支持和定期更新的课程材料来提升本科生的学习体验。CourseGPT能够利用课程特定的内容为学生提供精确和动态生成的回答,并且教师可以控制这些回答…

收藏:U盘加密软件哪个好用,防止U盘防复制软件

“物以稀为贵,藏之深则安。” 在信息时代的洪流中,数据之珍贵,无异于古时之金玉珠宝,而保护这些数据的安全,则成为了现代人心中的一道重要防线。 U盘,这小巧便携的数据存储工具,虽不及古时铜匣…

Jenkins-更新

文章目录 前言一、下载最新的war包二、安装最新的war包(一)查询Jenkins.war目录命令(二)切换到Jenkins.war的安装目录(三)上传最新Jenkins.war包 总结 前言 当我们在CentOS8 系统成功安装上Jenkins服务后&…

数据结构(6.2_1)——领接矩阵法

图的存储——邻接矩阵法 邻接矩阵(Adjacency Matrix)是一种使用二维数组来表示图的方法。在这种表示法中,矩阵的行和列都对应图的顶点。 特点 对于无向图,如果顶点i与顶点j之间有边,则矩阵的第i行第j列(…

pytorch实现单层线性回归模型

文章目录 简述代码重构要点 数学模型、运行结果数据构建与分批模型封装运行测试 简述 python使用 数值微分法 求梯度,实现单层线性回归-CSDN博客 python使用 计算图(forward与backward) 求梯度,实现单层线性回归-CSDN博客 数值微分…

会议中控系统有多少种编程方法

会议中控系统的编程方法并不局限于某一种固定的方式,而是根据系统的具体需求、开发团队的技能以及所选用的编程语言和技术栈等多种因素来决定的。以下是一些常见的会议中控系统编程方法和考虑因素: 1. 编程语言选择 会议中控系统的开发通常会选择以下几…

Kubernetes拉取阿里云的私人镜像

前提条件 登录到阿里云控制台 拥有阿里云的ACR服务 创建一个命名空间 获取仓库的访问凭证(可以设置固定密码) 例如 sudo docker login --usernameyourAliyunAccount registry.cn-guangzhou.aliyuncs.com 在K8s集群中创建一个secret 使用kubectl命令行…

qt生成一幅纯马赛克图像

由于项目需要&#xff0c;需生成一幅纯马赛克的图像作为背景&#xff0c;经过多次测试成功&#xff0c;记录下来。 方法一&#xff1a;未优化方法 1、代码&#xff1a; #include <QImage> #include <QDebug> #include <QElapsedTimer>QImage generateMosa…

AI跟踪报道第52期-新加坡内哥谈技术-本周AI新闻: X推出的惊人逼真的但不受约束的图像生成器和 GooglePixel 9

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

PostgreSQL-02-入门篇-查询数据

文章目录 1 简单查询SELECT 语句简介SELECT 语句语法SELECT 示例1) 使用 SELECT 语句查询一列数据的示例2) 使用 SELECT 语句查询多列数据的示例3) 使用 SELECT 语句查询表所有列数据的示例4) 使用带有表达式的 SELECT 语句的示例5) 使用带有表达式的 SELECT 语句的示例 2 列别…

大公报发表欧科云链署名文章:发行港元稳定币,建Web3.0新生态

欧科云链研究院资深研究员蒋照生近日与香港科技大学副校长兼香港Web3.0协会首席科学顾问汪扬、零壹智库创始人兼CEO柏亮&#xff0c;在大公报发布联合署名文章 ——《Web3.0洞察 / 发行港元稳定币&#xff0c;建Web3.0新生态》&#xff0c;引发市场广泛讨论。 文章就香港稳定币…

江科大/江协科技 STM32学习笔记P24

文章目录 DMA数据转运验证存储器映像的内容什么时候需要定义常量 验证外设寄存器的地址理解ADC1->DR main.c初始化DMADMA库函数MyDMA.cmain.c DMAAD多通道AD.cmain.c DMA数据转运 验证存储器映像的内容 #include "stm32f10x.h" // Device heade…

视频号分销系统搭建教程,源代码+部署上线指南

目录 一、视频号分销是什么&#xff1f; 二、视频号分销系统怎么搭建&#xff1f; 1.系统架构设计 2.部署与上线 3.持续迭代与升级 三、部分代码展示 一、视频号分销是什么&#xff1f; 视频号分销系统是合集了视频号商家的产品&#xff0c;推广达人推广商家的产品可赚取…

【算法 04】汉诺塔递归求解和通式求解

汉诺塔问题&#xff1a;一个经典的递归问题 汉诺塔&#xff08;Tower of Hanoi&#xff09;问题是一个源自古印度传说的经典益智游戏&#xff0c;也是心理学实验研究和计算机科学中常用的任务之一。该游戏通过三根高度相同的柱子和一系列大小及颜色不同的圆盘来构成&#xff0c…

[Python学习日记-7] 初识基本数据类型(下)

简介 我们在基本数据类型&#xff08;上&#xff09;当中介绍了数据类型中的数据类型&#xff08;整数、浮点数&#xff09;、字符串和布尔值&#xff0c;那么我们还剩下列表和数组还没有介绍了&#xff0c;在 Python 中&#xff0c;列表&#xff08;List&#xff09;是一种有序…

力扣Hot100-final关键字,常量,抽象类(模板方法设计模式),接口

&#xff08;一&#xff09;final关键字 &#xff08;2&#xff09;常量 使用static final 修饰的成员变量被称为常量 作用&#xff1a;&#xff1b;通常用于记录系统的配置信息 注意&#xff1a;产量命名要求&#xff1a;单词大写&#xff0c;下划线连接多个单词 产量优势…

windows下使用vcpkg编译libcurl库并使用C++实现ftp上传下载功能

1、下载安装vcpkg git clone https://github.com/microsoft/vcpkg2、编译vcpkg 使用cmd命令 D:\Code\ThirdParty>cd vcpkg D:\Code\ThirdParty\vcpkg>bootstrap-vcpkg.bat3、使用vcpkg编译所需的库 进入vckpkg目录&#xff0c;使用vckpkg install 命令进行安装。在安…

OJ题——二叉树(最大深度/平衡二叉树/前序遍历构建)

&#x1f36c;个人主页&#xff1a;Yanni.— &#x1f308;数据结构&#xff1a;Data Structure.​​​​​​ &#x1f382;C语言笔记&#xff1a;C Language Notes &#x1f3c0;OJ题分享&#xff1a; Topic Sharing 题目一&#xff08;最大深度&#xff09; 利用分治的思想&…

饿了么新财年开门见喜:亏损减负,收入增肌

撰稿 | 行星 来源 | 贝多财经 8月15日&#xff0c;阿里巴巴对外发布2025财年一季度&#xff08;即自然年2024年二季度&#xff09;业绩。不难看出&#xff0c;受益于饿了么和高德订单的显著增长&#xff0c;以及市场营销服务收入的明显拉升&#xff0c;该季度本地生活集团成绩…

10.DMA

理论 12个通道&#xff1a;DMA1&#xff08;7&#xff09;DMA2&#xff08;5&#xff09; 方向&#xff1a;存储器和存储器间(DMA_MEMORY_TO_MEMORY)、外设到存储器(DMA_PERIPH_TO_MEMORY)、存储器到外设(DMA_MEMORY_TO_PERIPH) 闪存、 SRAM、外设的SRAM、 APB1、 APB2和AHB外…