【Linux课程学习】:Linux的调试器-gdb的使用(常见指令,cgdb)

🎁个人主页:我们的五年

🔍系列专栏:Linux课程学习

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

安装cgdb:

基本环境

1检查gdb是否安装

2.让程序是debug模式:

3.查看文件信息:

gdb调试

1.进入/退出gdb命令行:

2.查看源代码:

3.执行完程序:

4.继续执行代码:

断点使用

1.增加断点:

2.查看断点信息:

3.删除断点:

其他指令:


gdb --version :查看当前gdb的版本。

sudo yum install -y gdb :安装gdb。

-g :生成debug版本的可执行程序。

readelf -S 可执行程序名称 | grep -i debug:查看文件信息。

file 文件名 :查看文件信息。

gdb (debug模式的文件名):进行调试。

quit或者Ctrl+d:退出调试。

Enter:执行最近一条命令。

list (文件名+:)(行号):查看行号位置的往上5行,往下5行,行号处于中间位置。

list (函数名):查看某个函数。

run:执行程序。(遇到断点停下)

next(n):单条执行,不进人函数。(F10)

step(s):单条执行,进入函数调用。(F11)

continue(c):从当前程序连续而非单步执行程序。

until 行号:跳至多少行。

break(简写:b) (指定文件) +(行号):在指定文件的指定行号增加断点。

break(简写:b)(指定文件)(函数名):在某个函数的开头设置断点。

info break(b):查看所有断点信息。

delete breakpoints(d):删除所有断点。

delete breakpoints(d) n:删除序号为n的断点。

disable breakpoints:禁用断点。

enable breakpoints:启用断点。

breaktrace(简写bt):查看各级函数调用及参数使用。

info (i)locals:查看当前栈帧局部变量的值。

display 变量:跟踪查看某个变量,每次停下都显式它的值。

undispaly 序号n:取消对序号为n的变量追踪。

p 变量:打印变量的值,也可以是表达式。

set var 变量=:修改变量的值。

print(p):打印表达式的值。


安装cgdb:

cgdb和gdb的指令相同,cgdb可以可视化源代码。

cgdb --version

sudo yum install -y cgdb

基本环境

环境:CentOS 7.8 64bit

调试的本质:找到问题。

1检查gdb是否安装

1.检查gdb的版本:

gdb --version

2.安装gdb:

sudo yum install -y gdb

已安装:

未安装:

2.让程序是debug模式:

在gcc/g++后面加上**-g**

Linux gcc/g++默认生成的二进制程序是release模式。

在源代码生成二进制文件的过程中加上-g就生成的是debug模式。

3.查看文件信息:

readelf -S 可执行程序名称 | grep -i debug

file 文件名

gdb调试

1.进入/退出gdb命令行:

gdb (debug模式的文件名)****//进入

quit或者Ctrl+d //退出

2.查看源代码:

list可以简写为:l

list (文件名+:)(行号):查看行号位置的往上5行,往下5行,行号处于中间位置。

list (函数名):查看某个函数。

下面表示代码显示完全:

out of range

Enter:gdb会记录最近一条out of range命令,Enter表示执行这一条命令。所以在上面的指令后面按Enter可以继续往下查看源代码。

3.执行完程序:

run可以简写为:r。

当程序已经启动,如果再次run,那么就会问你是否需要重新启动。

run:执行程序。(遇到断点停下)

4.继续执行代码:

next(n):单条执行,不进人函数。(F10)

step(s):单条执行,进入函数调用。(F11)

continue(c):从当前程序连续而非单步执行程序。

until 行号:跳至多少行。

断点使用

1.增加断点:

在一次调试周期中,序号只能线性递增。也就是说,如果最开始打了两个断点,他们的序号为1,2。然后新增断点时,不管有没有删除1,2号断点,新增的断点都是从3号开始。

break(简写:b) (指定文件) +(行号):在指定文件的指定行号增加断点。

break(简写:b)(指定文件)(函数名):在某个函数的开头设置断点。

2.查看断点信息:

info break(b):查看所有断点信息。

3.删除断点:

删除断点可以简写为d,删除断点只能是删除某个序号的断点。

delete breakpoints(d):删除所有断点。

delete breakpoints(d) n:删除序号为n的断点。

disable breakpoints:禁用断点。

enable breakpoints:启用断点。

其他指令:

breaktrace(简写bt):查看各级函数调用及参数使用。

info (i)locals:查看当前栈帧局部变量的值。
display 变量:跟踪查看某个变量,每次停下都显式它的值。

undispaly 序号n:取消对序号为n的变量追踪。
p 变量:打印变量的值,也可以是表达式。

set var 变量=:修改变量的值。

print(p):打印表达式的值。

相关推荐
llxxyy卢10 小时前
通关upload-labs(14-21)加分析源码
linux·运维·服务器
JosieBook11 小时前
【Rust】基于Rust 设计开发nginx运行日志高效分析工具
服务器·网络·rust
电话交换机IPPBX-3CX12 小时前
电话交换机IPPBX-3CX的呼叫记录导出
运维·服务器·网络
松涛和鸣12 小时前
11.C 语言学习:递归、宏定义、预处理、汉诺塔、Fibonacci 等
linux·c语言·开发语言·学习·算法·排序算法
2501_9411112414 小时前
C++与自动驾驶系统
开发语言·c++·算法
C-DHEnry14 小时前
Linux 不小心挂载错磁盘导致无法启动系统咋办
linux·运维·服务器·雨云
2501_9411116914 小时前
C++中的枚举类高级用法
开发语言·c++·算法
JosieBook14 小时前
【若依框架】若依前后端分离项目怎么部署到服务器?
运维·服务器
旭编14 小时前
小红的好矩形
c++·算法
f***686015 小时前
【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则
运维·服务器·安全