文章目录
前言
当想调式时,Linux没有Windows的Visual Studio的调试工具,那在Linux中想使用调试器就需要使用gdb调试器。
一、在调试前需了解版本
1、了解debug和release版本的区别
debug模式一般称为调试模式,release称为发布模式。
1.1、debug模式
调试信息,保留详细的调试信息,如变量名、函数调用栈等,以便开发者追踪问题和理解程序行为。这些调试信息对于快速定位问题和修复错误至关重要。
错误检测,通常启用断言(Assertions)和错误检查机制,以帮助开发者发现和修复潜在问题。这些机制有助于确保程序的健壮性和稳定性。
1.2、realse模式
调试信息,为了减小程序体积和提高运行速度,大部分调试信息会被移除。这意味着在Release模式下,开发者可能无法像Debug模式那样轻松地获取程序的内部状态信息。
错误检测,出于性能考虑,断言和错误检查机制通常被禁用或减少。这有助于减少程序运行时的开销,但也可能导致一些潜在问题在发布后才被发现。
二、使用gdb调试器
1、安装gdb
在默认情况下使用gbd应该是会报错的,如果报错的话需要安装。
//centos 系统
sudo yum install -y gdb
//ubuntu系统
sudo apt install gdb
2、使用gdb
使用已编译过的程序进行gdb调试方法
gdb test(程序名)
使用该指令会发现报错,其实是因为在Liunx中gcc和g++中默认是以release模式编译完成的,上面也解释了debug与release模式的区别,所以我们使用gdb编辑器的话,就要使用debug模式的程序。
3、程序编译为dubug模式
指令:
gcc -o test test.c -g
重点是 -g 模式,添加 -g 就是编译为debug模式
编译成功后我们后续就需要开始调试了。
三、开始调试
1、gdb指令
1.1、行号(list)
_ list、l (行号) _:用于显示指定行之后的代码(如未显示完,直接回车即可)
1.2、设置断点
break、b 行号/函数名/file(文件名):用于在某一行中设置一个断点
打断点之后用run开始运行。
就会在断点处停止(这里就与visual studio类似,就是以代码的形式出现)
#3# 1.3、查看断点位置
info b //用于查看我们所打的断点位置
1.4、删除断点
d 断点编号 //删除断点(断点编号需要使用info b去查看)
delete breakpoints //是用于删除所有断点
1.5、逐过程、逐语句
n //逐过程 ———— 同等于 vs 中 F10
s //逐语句 ———— 同等于 vs 中 F11
1.6、查看变量内容与地址
p 变量 // 显示变量的内容与地址
常显示变量
display 变量名/取地址 //与p类似,但用与常显示变量的内容和地址
删除常显示的变量
undisplay 编号 //取消常显示变量的内容和地址的指令
1.7、常用于查找问题指令
c //从一个断点运行到下一个断点
finish //将一个函数运行结束,继续执行后面的代码
until 行号 //在一个范围中,直接运行到指定行
1.8、查看调用的堆栈(函数)
bt //用于查看调用了那些函数的堆栈
1.9、修改程序中变量的数值
set name = value (变量 = 数值)//是用于修改一个变量的内容(无需修改代码)
2、运行程序
在进入gdb调试器后,我们使用run指令可以让gdb运行程序。
总结
本章就是讲解gdb的使用方法以及注意事项,后续可以使用cgdb,用法与gdb相似,界面也比gdb美观。