GDB简单调试

最近在开始刷LeetCode,也开始在Linux上写代码,直接gcc编译,在调试的时候,需要用到gdb调试,所以在这里会不定期更新我学习到的gdb调试。

先编译成可执行文件

首先我们使用g++或者gcc编译成可执行文件,记得要加-g编译选项,表示生成调试信息,以便我们使用gdb调试。

开始调试

假设我们有一个 main.cpp文件,编译链接后生成了main这个可执行文件,进行调试:

gdb main

设置断点

开始调试后,我们可以设置断点:

break 23

这个表示对源文件的23行设置一个断点。以上两步设置完可以看到以下:

94C8ECB541F84F33A7549B3603FE21A7?method=download&shareKey=2fbef6af2753d001dd93442256ce56ee

第一个框里面就是我们开始调试输入的命令,下面是生成的调试信息。第二个框里面就是我们输入的设置断点的命令了。

如果有多个源文件共同生成的,可以指定源文件的行数进行调试:

break main.cpp:23

其实,break也可以用b来简写。

使用:

info b

可以查看到设置的断点信息:

8E6ED4AA7615414398F1E48521846723?method=download&shareKey=dd6dbb1188508c7f9a69ab6c10daeedd

开始运行

现在我们来介绍设置完断点后,运行时候我们的调试规则,先看一下截图,是一个在调试的过程:

A8309C5BEE75497988B03ABABFD89230?method=download&shareKey=39cad6484e3c5ee808d88fcbd25b133e

图可能看起来很不想继续看,相信我,我以前也是这种态度,但是请你继续看,因为自己输入的东西很少,几乎都是它生成的信息更多。我已经把我们写的命令用方框框起来了。

现在一个命令一个命令的解释。

run

顾名思义,就是开始执行程序,直到执行到断点停下来。 在图中我简写成了r即可.

step,next

这两个都是单步调试,不同在于,step是可以进入到执行的函数中间去调试,next是直接跳过这个函数的调试,直接到下一行。

list

从图中可以看到,在我调试到第16行的时候,再输入一个list,会输出以16行为中心的代码。没错,list就是展示我们调试信息附近的代码。

printf

在图中我也是简写成p,都是可以的。可以明确看到,我们可以使用

p 变量名

来打印一个变量值。图中nums[i]此时的值是3,int型,地址为0x607010

quit

简写为q,就是退出GDB调试。

finish

结束GDB调试。

总结

gdb可执行文件
(gdb)start表示开始调试
(gdb) n表示执行下一步(不会进入函数)
(gdb) step表示执行下一步(会进入函数)
(gdb) b Line给第Line行设置断点
(gdb) b xx.cpp:Line给xx文件第Line行设置断点
(gdb) quit表示退出调试
(gdb) p 变量名可以查看变量的值
(gdb) finish表示直接执行到当前函数结束
(gdb) list可以显示当前部分代码
(gdb) list Line可以显示Line行附近
(gdb) info b显示断点信息
(gdb) d num(显示信息中的断点编号)删除指定断点
(gdb) c (continue)跳到下一个断点
(gdb) ptype 变量名查看变量类型
(gdb) set argv[i]=x设置参数值
(gdb) display 变量跟踪变量,看每一步的值
(gdb) info display显示跟踪信息
(gdb) undisplay num(显示信息中的编号)放弃跟踪值
(gdb) break Line if i==6条件断点。在Line行设置断点,并运行到i=6时停下来

转载于:https://www.cnblogs.com/love-jelly-pig/p/9750885.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值