GDB for C++ in Linux

这篇文章主要讲讲如何在 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

  1. 除特殊说明,下面都指在 GDB 中。 ↩
  2. 输入后按回车。 ↩

你可能感兴趣的:(编程语言)