linux gdb 调试
文章平均质量分 92
作为后端开发工程师,gdb 调试是必备技能,这个技能应该是一个能力集,不仅仅是会几个gdb 调试指令即可,而是在这个过程中,遇到任何问题,都应该能够独立分析解决。这也是我写本专栏的初心
谢艺华
主要深耕于 linux 后端开发,热衷于体系能力(包括不限于C、C++、linux、编译原理、数据结构和算法、网络、操作系统
)的沉淀,分享工作中重要的知识点和具有代表性的案例分析。
欢迎志同道合的朋友与我一起前进
展开
-
*** stack smashing detected ***,彻底搞懂GCC栈保护的实现原理以及问题分析套路
本文通过工作中的案例,了解到gcc实现栈保护的原理,以及分享遇到相关问题的排查思路及技巧。希望能够帮助到您。若我的内容对您有所帮助,还请关注我的公众号。不定期分享干活,剖析案例,也可以一起讨论分享。踩完您工作中的所有坑并分享给您,让你的工作无bug,人生尽是坦途参考文章:https://applink.feishu.cn/client/message/link/open?原创 2024-05-05 17:41:49 · 1975 阅读 · 0 评论 -
【案例分析】解决困扰项目半年之久的问题,并让同事对我竖起了大拇指!!!
为了帮助您快速理解问题,我先向您简单介绍一下软件架构(架构以及基础件的设计非常不合理🤕,勿喷!!!我们采用多进程服务方式。不同类型的业务由不同的进程去实现。为了日志分析方便。后续决定将不同进程的log打印输入到同一个文件中。于是就产生了logRcv进程。它的作用就是通过读取共享内存中,来自其它业务线程的日志。将其写入统一的日志文件中。int tail;/** 1.获取共享内存锁*//** 2.将日志写入buf*/原创 2024-04-07 20:30:47 · 1221 阅读 · 0 评论 -
gdb 环境问题:Backtrace stopped: previous frame identical to this frame (corrupt stack?)
若您与我遇到了相似的问题,不妨试试将以上三个库重新编译一份,替换成具备debug_info,以及not stripped。若依旧不能解决,坚决一点,就是供应商的问题,让他们去解决。若我的内容对您有所帮助,还请关注我的公众号。不定期分享干活,剖析案例,也可以一起讨论分享。踩完您工作中的所有坑并分享给您,让你的工作无bug,人生尽是坦途。原创 2024-04-06 10:23:40 · 3966 阅读 · 0 评论 -
请对exit 说 No !!!
成熟且优秀的程序员应该对程序运行过程中每一个字节都应该清晰原创 2023-04-13 15:49:32 · 620 阅读 · 0 评论 -
【小白进阶】Linux 调试大法——gdb
设备里面可能同时运行多个应用,不同的应用可能都会发生crash,若core文件名不做特殊识别,可能无法在多个core文件中,找到我们需要的那一个。作为后端开发工程师,gdb 调试是必备技能,这个技能应该是一个能力集,不仅仅是会几个gdb 调试指令即可,而是在这个过程中,遇到任何问题,都应该能够独立分析解决。我想说的是,这点能力是完全不够的,身边一些同事稍微遇到一点问题,就不知道如何进行调试了。coredump是将程序崩溃的那一刻的内存进行快照,因此越占用内存的进程,其生成的core文件,也就会越大。原创 2023-11-28 16:07:53 · 2311 阅读 · 2 评论 -
Linux 调试进阶(多场景覆盖)
如图所示,当通过gdb 查看到 crash 点在 func3 内部中时,我们若想知道传入参数i的值,通过 gdb 是无法进行打印的。,因为栈的顺序是从高地址向低地址增加,而$sp指针作为栈顶指针,肯定是线程栈内的最低地址,而程序访问,赋值的操作是向上增加,因此$sp指针大部分情况不会被破坏,$bp指针,可能会被破坏。很多时候,异常出现后,因为无法获取更多的分析信息。因此,大部分SDK 提供方,编译过程中,会生成两份SDK,一份是不加-g编译选项且strip 过的,一份是增加-g 选项,不strip的。原创 2023-07-13 17:51:33 · 600 阅读 · 0 评论 -
【案例】由coredump引起的思考:程序的加载流程
小米项目的同事,最近遇到了一个crash问题,困扰较久,向我请求帮助。(其实是客户指定要求我来分析这个问题,该项目之前是由我负责的,帮客户解决很多较多crash问题。但是文件转移实例化对象,属于全局变量,之后在进程退出时,由系统进行回收。按照这个思路分析,怀疑是某个线程,调用了类似exit函数,导致系统默认为是进程正常退出。经验证,当下发任务后,会按照预期,调用exit(),之后进行资源回收,调用析构函数。我们知道正常的堆栈信息,调用栈的最上层接口一般是main函数,或子线程的入口接口。原创 2023-11-15 16:11:18 · 410 阅读 · 1 评论 -
工作中如何编译开源工具(gdb)
编译是大部分工程师的烦恼,大家普遍喜欢去写业务代码。但我觉得基本的编译流程,我们还是需要掌握的,希望遇到相关问题,不要退缩,尝试去解决。天下文章一大抄,百度能解决我们90%的问题。原创 2021-08-26 20:56:16 · 3300 阅读 · 1 评论