<Linux> gdb调试器的使用

目录

1. debug && release

2. 显示代码 list

3. 退出调试

4. 设置断点 break

4.1. 添加断点 break

4.2. 删除断点 delete

 4.3 禁用断点 disable

4.4 启用断点 enable 

4.5. 逐过程调试 next

 4.6. 逐语句调试 step

4.7 until 

4.8 finish

4.9 continue

4.10 breaktrace 

4.11 info

5. 查看变量信息 print

5.1 display         

5.2 undisplay        

6. set var 


1. debug && release

        正常gcc编译出的可执行程序是release版本,不能调试,所以我们需要在makefile文件中的make依赖方法处添加 -g 命令,使生成的可执行程序为debug版本,可以被我们调试

gcc默认编译时release方式发布的,无法直接调试,所以如果要被gdb调试,必须debug方式发布,必须再编译时加-g选项

gcc mycode.c -o mycode_debug -g

再使用gdb指令开始调试

        使用以下指令可以查看对应文件的二进制信息,release版本没有以下信息,即debug版本比release版本多了可调试信息,可以使用下面的指令来查看该文件是否含有debug信息

readelf -S mycode-debug | grep -i debug

2. 显示代码 list

        VS有图形化界面,可以在调试的时候看到代码,而Linux中没有,那么我们要看到可执行程序中的代码就需要用指令来查看,list就是这个功能

        list可简写为l

lsit(l) 数字        //表示从第几行开始显示,默认显示10行
或 list 函数名   //找到函数所在位置,并列举附近代码

       

        注意:gdb会自动记录历史命令,所以list之后可以多次回车,默认跟着上一句指令继续往下查看代码 

3. 退出调试

        如果要退出gdb调试模式,使用quit指令,简写为q 

4. 设置断点 break

4.1. 添加断点 break

        相对应的VS的F5可以设置断点,那么linux也有设置断点指令

break(b) 行号    //在某一行设置断点

        设置断点后,我们还可以使用指令来查看我们设置的断点信息

info break
简写info b

可以直接 b 函数名 ,更方便的添加断点,会直接打到函数第一个语句处 

b 函数名

b 函数名:行号
//这里的函数名可以是文件名,可以进行多文件调试

4.2. 删除断点 delete

        如果断点设置错了,或者想要删除断点,使用delete指令,可简写为d。但是需要注意的是,不能直接在delete后跟断点所在的行号,而是要跟上断点的编号

        注意:如果在调试过程,退出调试,那么之前设置的断点等信息都会消失,所以,如果你还要进行调试,那么不要使用q命令退出gdb调试,继续使用r指令,此时断点等信息都还存在,运行程序即可。

 4.3 禁用断点 disable

        如果不想让该断点生效,又不想删除该断点,那么可以使用disable指令禁用该断点,disable后跟的是断点编号

4.4 启用断点 enable 

4.5. 逐过程调试 next

        在到达断点后的VS中,我们应该进行的是F10逐过程或F11逐语句进行调试,相应的,在Linux中,next指令表示逐过程调试,可简写为n

  • 在每次执行后,都会显示:断点信息、在哪个函数内、在第几行代码的信息,
  • 调试时,空行直接跳过调试 ,所以调试的行号可能不连续
  • gdb会自动记录历史命令,所以不用多次n,直接多次回车即可

 4.6. 逐语句调试 step

        想进入函数内部调试,使用step指令,简写为s

4.7 until 

        如果进入到了循环里,但是想跳出循环,继续调试,那么使用until指令

4.8 finish

         如果想快速结束函数,回到函数调用处,就是用finish指令。例如,程序出现错误,我们要判断错误来自哪一个函数,我们就可以finish来逐步查找哪一个函数出现问题

4.9 continue

         如果想从一个断点直接到达下一个断点,那么使用continue指令,可简写为c

4.10 breaktrace 

        查看堆栈调用情况,可简写为bt

4.11 info

info b    //查看断点信息
info locals    //类似VS中的自动窗口,查看局部的变量值

5. 查看变量信息 print

        使用print指令,可简写为p,后边跟变量名,如果要查看地址,带上&符号

5.1 display         

        在VS中,我们监控的变量值会随着调试改变,一直被可视化监视。如果Linux只能使用上面的形式查看变量的值,那就显得太不方便了,所以Linux中还有一个可以常显示变量信息的指令——display

        display后跟上变量名,或&变量名即可对这些被监视的变量进行编号,每次逐过程或逐语句调试后,都会显示它们的值

5.2 undisplay        

        如果不想再监视常显示的变量,需要使用undisplay指令,同取消断点一样,后面需要跟编号信息,不能直接跟变量名

 

6. set var 

        在调试时,可以使用 set var 指令进行修改变量的值,以达到快速观察函数以该变量值运行的效果

set var 变量名 = xx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值