🎁个人主页:我们的五年
🔍系列专栏: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):打印表达式的值。