个人主页:Weraphael
✍作者简介:目前正在学习c++
和Linux
还有算法
✈️专栏:Linux
希望大家多多支持,咱一起进步!
如果文章有啥瑕疵,希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论 点赞 收藏 加关注
程序的发布方式有两种,debug
模式和release
模式。
在Linux
下,gcc/g++
编译的程序默认是release
模式(没有调试信息),这个我们是可以验证的
那么,如果在Linux
要调试代码(debug
模式),需要加上 -g
选项。
gdb --version
大家首先在自己的云服务器指向以上命令,如果出现以下情况,那么你就要安装gdb
指令
# 安装指令
sudo yum install -y gdb
注意:调试的对象是已经生成的可执行程序,不是最开始的源文件
为了方便接下来的演示,我把生成的可执行程序的命令写进makefile
文件里
gdb [可执行文件]
q 或 quit
l
指令随时随地查看代码。l
命令一般是配合数字进行查看,不加数字默认查看代码最中间的十行内容
l 1 //从代码第一行开始查看其前后十行
l // 默认查看代码最中间的十行内容
那如果想查看整个代码怎么办?很简单,只要第一次输入l 1
,那么按回车后可接着往下展示,直到代码展示完毕。
r
b 行号
b 函数
b 源文件 [行号](多文件)
b 源文件:[函数] (多文件)
注意:退出调试后,第二次打开gdb
,之前打的所有断点都会被自动清理;只要本次gdb
不退出,断点依旧存在。
info b
断点详细信息简介:
Num
:代表断点编号。Enb
:表示断点的使用状态。y
表示启用,n
表示禁用。Address
:表示断点的地址。What
:代表断点在哪个函数以及行号。F10
,即不会进入函数n
F11
,即会进入函数s
p [变量]
display [变量](常显示)
undisplay + 编号 (取消常显示)
set var 变量=你要修改的值
until + 指定行
的方式跳转至指定行,这个指令通常用来跳过循环。until + [指定行]
finish
就可以在不打断点的情况下,跑完当前函数finish
r
只能执行第一个断点,但无法实现两个断点间的跳转(注:依然需要先通过r
指令把程序跑起来)c
disable [断点编号]
enable [断点编号]
bt
info locals