提示:本文主要介绍了什么是gdb,以及gdb指令及其具体使用案例
————故不积跬步,无以至千里;不积小流,无以成江海。
文章目录
- 一、gdb模式下命令一览。
- 1.1基本命令:
- 1.2 断点命令:
- 1.3 数据命令:
- 1.4 调试相关命令:
- 二、什么是gdb?
- 2.1 基础命令展示
一、gdb模式下命令一览。
1.1基本命令:
命令 | 描述 |
---|---|
q/quit | 退出gdb |
l | 查看源文件源码 |
b 6(x) | 添加断点到gdb的第x行 |
info b | 查看断点(可设置多个断点) |
d x | 删除所设置的第x个断点,有多个断点 |
r | 运行代码 |
watch n | 当我们在n处设置的观察点时,r后该命令显示n处程序 |
n | 单句执行(VS下逐过程F10) |
s | 单条执行(VS下逐语句F11) |
c | 程序继续运行,除非遇到新的断点,或者程序结束 |
1.2 断点命令:
命令 | 描述 |
---|---|
finish | 运行完当前函数的代码回到调用该函数处,然后停下来等待命令 |
break + n | 在第n行设置断点 |
tbreak + 行号或函数名 | 设置临时断点,到达后被自动删除 |
break + 行号 + if + 条件 | 用于设置条件断点,在循环中使用非常方便 |
clear + 要清除的断点行号 | 清楚对应行号的断点 |
delete + 要清除的断点编号 | 针对断点编号的清楚断点 |
disable+断点编号 | 使得指定编号断点暂时失效 |
watch+变量 | 设置一个观察点,当变量被读出或写入时程序被暂停 |
1.3 数据命令:
命令 | 描述 |
---|---|
display +表达式 | 显示表达式的值,当程序运行到断点处就会显示 |
delete + display 编号 | 用于删除一个要显示值的表达式,被删除的表达式将不被显示 |
disable/enable + display 编号 | 使一个要显示值的表达式暂时失效/使能 |
print§ + 变量/表达式 | 用于打印变量或表达式的值 |
info display | 用于显示当前所有要显示值的表达式的情况 |
1.4 调试相关命令:
命令 | 描述 |
---|---|
set width + 数目 | 设置GDB的行宽 |
set width + 数目 | 设置GDB的行宽 |
cd + 工作目录 | 切换工作目录 |
r/run | 程序开始执行 |
step(s) | 进入式(会进入到所调用的子函数中)单步执行,进入函数的前提是,此函数被编译有debug信息 |
finish | 一直运行到函数返回并打印函数返回时的堆栈地址和返回值及参数值等信息 |
until + 行数 | 运行到函数某一行 |
continue© | 执行到下一个断点或程序结束 |
return <返回值> | 改变程序流程,直接结束当前函数,并将指定值返回 |
call + 函数 | 在当前位置执行所要运行的函数 |
二、什么是gdb?
同Windows下的VS编译器下的调试机制一样,在Linux系统下有着它独特的调试器gdb,用来帮助我们发现并解决编程中产生的错误。
2.1 基础命令展示
gdb编译器进入方式:
当我们直接通过gdb进入时,会发现它提示了一堆的东西。
除了执行程序的基本信息,还提示没有在debug版本下。
当我们打开Linux时,默认都就是release模式,不具备调试信息,此时就需要在makefile中编译时加上**-g选项。
重新生成:就会发现没有了debug提示!
学会了进入,我们先了解一下gdb模式如何退出:quit/ctrl+d命令
在gdb模式下万能的ctrl+c命令会失去效果,摁一万次也不能成功退出gdb模式。
此时我们可以通过输入quit命令,或者直接使用ctrl+d**的方式退出。
gdb下增加断点:b X。
gdb下查看断点:info b。
gdb下删除断点:d X。
gdb下运行程序:r
gdb下逐句执行:n(vs中F10)
gdb下逐条执行:s(vs中F11)
gdb下逐断点、逐程序执行:c