当前位置: 首页 > news >正文

Linux: 调试器gdb/cgdb

文章目录

  • 调试器gdb/cgdb
  • gdb 核心调试命令(按调试流程分类)
  • 命令 全称 功能
  • cgdb
  • cgcb操作

调试器gdb/cgdb

我们发布软件有debug和release版本
gcc/g++默认模式是release模式,不是dubug

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项,如果没有添加,程序无法被编译,程序要调试必须是debug模式。
在这里插入图片描述

这样我们make后就是debug程序。也能运行,但是体积更大,因为内部有调试信息,可以供程序员调试。

gdb 核心调试命令(按调试流程分类)

  1. 基础控制:启动、暂停、继续执行

在这里插入图片描述

  1. 断点管理:控制程序暂停位置

命令 全称 功能

在这里插入图片描述

  1. 查看与修改数据:变量、内存、表达式
    程序暂停时(如断点触发后),可查看或修改变量、内存值,验证逻辑是否正确。

在这里插入图片描述

  1. 调用栈分析:定位函数调用关系
    当程序崩溃或暂停时,通过调用栈(Call Stack)可查看 “当前执行到哪个函数,这个函数由谁调用,上层还有哪些函数”,快速定位问题所在。

在这里插入图片描述

  1. 其他实用功能

在这里插入图片描述

五、常用快捷键

gdb 支持类似 shell 的快捷键,提高操作效率:

↑/↓:查看历史命令(避免重复输入)
Tab:自动补全命令或文件名
Ctrl + c:中断当前正在执行的 gdb 命令(如程序运行时强制暂停)

cgdb

要先安装
在这里插入图片描述

然后cgdb xxx

在这里插入图片描述

这样上面是代码界面,下面是调试界面,比gdb方便多了
在这里插入图片描述

cgcb操作

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
c跳到下一个断点,条件断点的使用c跳,可以使用条件都安到也可以condition 添加条件断点

每一次函数调用的过程就是形成栈栈帧的过程
函数调用就是入栈的过程

在这里插入图片描述

这里result具有常量属性,是写在寄存器中,具有常属性

在这里插入图片描述

这里汇编语言就是call了Sum函数后把值存在寄存器中,然后把eax寄存器里的值赋值给函数内部栈上的一个临时变量n。

注意:
• 条件断点添加常⻅两种⽅式:1. 新增 2. 给已有断点追加
• 注意两者的语法有区别,不要写错了。
• 新增: b ⾏号/⽂件名:⾏号/函数名 if i == 30(条件)
• 给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if

http://www.dtcms.com/a/301146.html

相关文章:

  • 第六章 JavaScript 互操(2).NET调用JS
  • K-近邻算法
  • MPLS LDP(概念)
  • 20250707-2-Kubernetes 网络-Ingress暴露应用(http与https)_笔记
  • Flink窗口:解锁流计算的秘密武器
  • JavaEE初阶第十二期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十)
  • KingbaseES聚焦产品上线
  • 卫星图像语义分割与区域相似度比较研究
  • 顺序表算法题
  • 【自动化运维神器Ansible】Ansible常用模块之hostname模块详解
  • Qt C++动态库SDK在Visual Studio 2022使用(C++/C#版本)
  • ae烟雾-分形杂色
  • Python——入门
  • 金融科技里的信用评分、指纹识别、面部识别、虹膜识别
  • 地震成果数据在线可视化功能实现之高级篇
  • 枚举中间位置基础篇
  • Mysql中的索引详解
  • 「iOS」————MRC
  • 【Linux系统编程】环境变量,进程地址空间与进程控制
  • OpenResty 高并发揭秘:架构优势与 Linux 优化实践
  • IIS发布.NET9 API 常见报错汇总
  • 设计模式(九)结构型:组合模式详解
  • STM32的蓝牙通讯(HAL库)
  • 【ELasticsearch】温、冷数据节点能是同一个节点吗
  • 探秘 Nginx 的工作原理
  • Python Pandas.qcut函数解析与实战教程
  • 前后端分离:架构模式与实践
  • 设计模式(十二)结构型:享元模式详解
  • 基于黑马教程——微服务架构解析(一)
  • 20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音