文章目录
- 调试器gdb/cgdb
- [gdb 核心调试命令(按调试流程分类)](#gdb 核心调试命令(按调试流程分类))
- [命令 全称 功能](#命令 全称 功能)
- cgdb
- cgcb操作
调试器gdb/cgdb
我们发布软件有debug和release版本
gcc/g++默认模式是release模式,不是dubug
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项,如果没有添加,程序无法被编译,程序要调试必须是debug模式。
这样我们make后就是debug程序。也能运行,但是体积更大,因为内部有调试信息,可以供程序员调试。
gdb 核心调试命令(按调试流程分类)
- 基础控制:启动、暂停、继续执行

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

命令 全称 功能

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

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

- 其他实用功能

五、常用快捷键
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