gdb与symbol符号表文件的调试

news2024/11/17 17:52:18

   

目录

1,剥离命令

2,gdb+debug 文件的调试


        今天在调试程序的时候发现,在测试部测试的程序都是剥离了符号表的,导致用gdb无法调试,只有找到符号表文件才能继续gdb调试,好在符号表文件是和程序一起发布的。之前一直没有用符号表文件进行调试过,今天记录一下。

1,剥离命令

strip 和 objcopy ,这两个命令都可以用来剥离符号信息,我们看man strip,如下:

strip - Discard symbols from object files.

而 man objcopy 如下:

objcopy - copy and translate object files

这两个命令有很多相似,这个可以慢慢自己研究。今天要用的是 objcopy 命令把app里的符号信息拷出来。

objcopy --only-keep-debug app app.debug 把debug信息拷贝到 app.debug 文件中,可以用于gdb的调试。如果不指定目标文件(即app.debug)则是创建了临时文件,并最终覆盖了原文件,如:

objcopy --only-keep-debug app 最终 app 将不包含debug信息。而上面那个命令,原来还是保留着debug信息。如下图, 一个是剥离了debug信息,一个是没有剥离 debug 信息

2,gdb+debug 文件的调试

 即使是剥离了 debug 信息,用 gdb 调试时还是可以打断点的,如加个函数断点:

 断点触发时,bt 出来的是没有相关的符号信息的

 gdb 里用 symbol-file 加载 debug 文件后,却无法解析栈帧:

 最后是用这个命令:objcopy --add-gnu-debuglink=app.debug app,即在objcopy debug 符号出来后,再加上这条命令,然后在gdb里调试时,这个debug文件被自己加载了:

 然后再gdb的时候,bt 出来后符号信息就全了:

但实际发布的程序就是剥离的app和符号表文件是分开的,上面测试的app和app.debug是在同一个目录下,它能找到然后自动加载了?实际的项目中,被剥离的符号文件一般是一个压缩包,解压出来后是很多的.sym 文件,在gdb的时候就要手动加载这些.sym文件了。

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

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

相关文章

浅谈作为程序员如何写好文档:了解读者

我作为从一名懵懂的实习生转变为工程师的工作经历中,伴随着技术经验的成长,也逐渐意识到了编写文档是知识和经验传递给其他人的最有效方式。通过文档,可以分享我的技术知识和最佳实践,使其他人更好地理解我的工作。在这里&#xf…

Postgres : 创建schema、创建表空间与指定用户权限

1. 创建新的Schema 要创建 PostgreSQL 中的一个新的 schema,并创建一个只有该 schema 权限的新用户,请按照以下步骤操作: (1)打开 PostgreSQL 客户端并连接到数据库服务器。 (2)创建一个新的…

如何在Oracle存储过程发生异常时获取out类型参数的值

Oracle存储过程关于在出现(自定义/自带)异常下out类型参数的获取问题的分析 ✈️ 场景: 有一些关于金额和时间的精确且量大的计算需要在存储过程中完成。存储过程中有一些自定义的异常。并且将在RAISE前通过out类型的参数将详细的异常原因返回。 但是在…

商业智能BI分析报表很慢是什么原因?应该如何优化?

当下,数据计算已成为了分析工作中必不可少的高频次操作之一,而且在大数据的发展背景下,应用性能往往关系着项目的成败,成为了大家最为关注的产品技术参数。那么我们先来分析一下BI分析表计算很慢的原因是什么,再对症下…

Microsoft Dynamics 365 Business Central 生产订单扣料的几种方法

学习目标: 掌握生产订单扣料的几种方法 学习内容: Forward flush by routing operation(通过工序:向前扣料)Backward flush by routing operation(通过工序:向后扣料)Forward flus…

Java-Redis持久化之RDB操作

Java-Redis持久化之RDB操作 1.为什么redis需要持久化?2.什么是RDB操作?3.请你用自己的话讲下RDB的过程?4.如何恢复rdb文件? 1.为什么redis需要持久化? Redis是内存数据库,如果不将内存数据库保存到磁盘,那么服务器进程退出&am…

匿名对象的特性和使用场景你知道吗?

目录 一、匿名对象的概念 二、单参数和多参数构造场景的匿名对象 ①只有一个参数的构造函数 ②多个参数的构造函数 三、使用匿名对象作为函数的参数的缺省值 四、只为调用类中的一个函数时 五、匿名对象的特性 1、匿名对象的生命周期只有一行 2、匿名对象具有常性 3、当匿…

今天去面一个点工,HR要我会数据库,Linux还有Python,这合理吗?

软件测试出路在哪? 业务编程!! 1、软件测试的变化趋势 变化趋势1: 功能测试是核心,但是价值降低 目前测试这个行业,还是有大量的点工。但是行业的进步,技术的创新,导致了企业的需求…

不用下载的网页版Axure在这里

作为一名产品经理,你一定需要一款能够帮助你更好更快地制作原型,更方便地和团队协作的软件。网页版Axure工具替代即时设计无需下载激活,就可免费使用。那么,Axure网页版工具替代即时设计是如何进行的呢? 首先&#xf…

【数据结构】双向带头循环链表

文章目录 一、什么是带头双向循环链表二、带头双向循环链表的实现(一)链表中结构体的声明(二)头节点的创建(链表的初始化)(三)新节点的创建(四)链表的尾插&am…

( 位运算 ) 231. 2 的幂 ——【Leetcode每日一题】

❓231. 2 的幂 难度:简单 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2 x n 2^x n2x ,则认为 n 是 2 的幂次方。 示例 1&…

软考高级架构师笔记1-计算机硬件

目录 1. 前言 & 更新2. CPU组成3. CPU的指令集:4.存储器5. 总线1. 前言 & 更新 注意:绪论不考,直接略过。 计算机硬件章节19-21年没考过,在22年真题考过磁盘调度,根据趋势分析,以后考的概率也不大,了解即可。 本节删掉了第一版中的编码、海明码等内容。 2. CP…

一篇文章搞定《Android异常处理》

------《Android异常处理》 异常种类(简述)编译时异常运行时异常 运行时的异常和崩溃受检时的异常第一种做法:第二种做法: 不受检时的异常(崩溃Crash)异常的传播崩溃的兜底Looper 循环问题主流程抛出异常问题 安全气囊的实现方案设…

计算机组成原理---第六章总线系统 习题详解版

(一)课内习题 (二)课后习题 1.比较单总线、多总线结构的性能特点。 答: (1) 单总线结构:它是用单一的系统总线连接整个计算 机系统的各大功能部件,各大部件之间的所有的信息传送都通过这组总线…

【企业信息化】第6集 免费开源ERP: Odoo 16 MRP + 维护+ PLM +质量全面生产制造管理

文章目录 一、MRP 物料需求计划1.一款软件,满足您的所有需要2.工作中心控制面板3.优化您的库存等级4.条形码,即开即用5.出色报告关键绩效指标6.与其他Odoo应用程序完全集成 二、PLM 产品生命周期管理1.管理工程变更2.集成文件管理3.智能版本管理4.与其他…

还在为项目初始化、依赖管理问题困扰?Dubbo Initializer 来了!

作者:Dubbo 社区 通过这篇文章,你将学习如何在 1 分钟内用 Dubbo Initializer 模板快速创建 Dubbo Spring Boot 项目,帮你解决项目初始化问题。 什么是 Dubbo Initializer? Dubbo Initializer 是一款帮助开发者快速生成 Dubbo …

【0基础也能学会】JMeter:如何开始简单的WEB压力测试?

背景 最近工作上被安排针对Web网站进行性能压测,以评估特定的硬件配置下Web网站可支持的并发用户数。考虑到JMeter是流行的Web性能压测工具,因此趁着这次机会上网查阅了很多关于JMeter的资料,也自己动手进行软件的配置和调测,从最…

前瞻洞察|借助机器学习,揪出利用DNS隐蔽隧道作恶黑手

黑客会利用DNS协议进行违法犯罪活动,那DNS协议到底是什么?它有何作用?为什么会被选作进行作恶的手段?会造成什么危害?怎么检测及研究现状如何?一连串疑问接踵而至。本篇文章中,我们会为大家一一…

【Java多线程编程】Thread类

Thread类是什么? Thread 类是 Java 提供的一个标准库,我们可以通过 Thread 类进行多线程编程。因此,今天我给大家讲解的是如何使用 Thread 类进行线程编程。 详细讲解 Thread 类中的:lambda 表达式、start 方法(启动线…

WiFi(Wireless Fidelity)基础(七)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…