这篇文章主要讲讲如何在 Linux 下使用 GDB,当然,就指令而言在 Windows 下也适用。
- 环境
- Items
- 编译
- 启动
- 退出
- 加载文件
- 查看源代码
- 断点
- 运行程序
- 查看变量
- 控制程序执行
环境
Ubuntu 16.04 LTS
大同小异。
Items
编译
编译请加上 -g
选项。
启动
在你的工作目录下启动终端,使用 g++
编译你的代码。为了方便,我们的可执行文件不要扩展名,就叫做 code
吧。
在终端中输入 gdb
即可启动。
退出
在 GDB 中1,键入2:
quit
即可退出 GDB。
如果它阻拦你,多半是因为还有进程在运行。想要继续退出,照它的指令输入 y
即可。
注意,退出的指令不是 exit
。
加载文件
键入:
file code
file
表示加载文件,code
是你的可执行文件的文件名。
如果加载成功,将会显示:
Reading symbols from code...done.
上面的 code
是文件名。
加载文件只是载入了文件的符号,不会运行文件。
查看源代码
键入:
list
即可查看部分源代码,依次调用打印 10 行。
可简写为:
l
如果连续调用 list
,将向下继续打印源代码。当打印完时,将会提示:
Line number [x] out of range; [name] has [x - 1] lines.
说明 list
需要手动指定行号才好:
l [line number]
断点
一般来说,你需要先下断点再运行程序,不然程序一下子就运行完了。
插入断点
键入:
break [line number]
即可在指定行号下断点。
可简写为:
b
成功后将会提示,会告诉你断点的编号([index]
):
Breakpoint [index] at [address]: file [source], line [line number].
注意,你最好是给断点加上行号。如果直接调用 break
,将会在当前运行行下断点。
另外,同一行可以下多个断点,GDB 将会提示你已经在该行下了的断点的编号。
删除断点
键入:
clear [line number]
即可删除在该行下的所有断点。
键入:
delete [index]
即可删除编号为 [index]
的端点。
可简写为:
d
运行程序
键入:
run
即可开始运行程序。
可简写为:
r
当程序正在运行时,也可调用 run
。这时 GDB 会提醒你是否重启程序。
查看变量
键入:
print [expression]
即可查看表达式的值。
可简写为:
p
键入:
display [expression]
将会在每次都打印表达式的值。
如果成功,将会在行首打印每个表达式的编号。键入:
undisplay [index]
将不再打印编号为 [index]
的表达式。
控制程序执行
在程序被断下来后,可以用各种命令控制程序执行。
继续
键入:
continue
即可继续执行程序。何为继续?这里不再阐述,自己体会。
可简写为:
c
下一步
键入:
next
可简写为:
n
单步进入
键入:
step
可简写为:
s
结束程序
键入:
kill
- 除特殊说明,下面都指在 GDB 中。 ↩
- 输入后按回车。 ↩
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)