Linux/macOS 下编译运行代码及gdb编译工具使用指南
-
终端编译运行方法(以cpp为例)
- 用快捷键Ctrl+ Alt+ T打开终端, 使用cd命令定位到代码所在文件夹。也可以直接在代码所在文件夹中右键鼠标,然后选择打开终端(open terminal)
- 在终端中输入编译命令: g++ [代码文件名] -o [生成可执行文件名] -g -std=c++11
- 在终端中输入命令运行编译出来的可执行文件: ./[可执行文件名] 例如要编译运行位于路径
c
o
n
t
e
s
t
c
o
d
e
contestcode
contestcode 下的名为
a
.
c
p
p
a.cpp
a.cpp的代码:
cd contesttode
g++ a.cpp -o a -g -std=c++11(由于默认生成文件名为a.out的可执行文件,使用**-o参数后面街上文件名就表示指定生成的文件名,-g**表示将要调试)
在运行程序的过程时,可以在终端中使用快捷键Ctrl + C来提前终止程序的执行
-
使用gdb工具调试程序的方法:
- 使用上述编译方法将.cpp文件编译成可执行文件
- 在终端中输入命令 gdb[可执行文件名] 来进入gdb界面
例如要调试代码a.cpp,假设已经将它编译成了可执行文件 a
gdb a
(注意、每次修改代码后都需要重新编译,才能用gdb调试新的代码)
-
进入gdb界面后就可以使用gdb的命令来调试程序,常用的gdb命令如下:
- 运行代码: r, 代码会从头开始运行直至代码结束或是遇到第一个断点
- 在代码的某一行设置断点: b [行号]
- 删除断点: del [断点编号] 断点从1开始编号,当一个断点设置成功后gdb会在屏幕上给出它的编号
- 继续执行: c, 此时代码会从停下的位置继续执行,直到程序结束或是遇到下一 个断点
- 单步执行(跳过函数): n, 跳转到下一行代码而不进入函数内部
- 单步执行(进入函数): s, 跳转到下一行代码,若当前行中有函数调用,则进入函数内部
- 输出某个变量的值: p [变量名],在屏幕上显示出变量当前的值
- 跟踪某个变量的值: disp [变量名], 将变量添加到追踪表中,之后代码再执行时就会自
动的将这些变量的值显示在屏幕上 - 显示现在追踪的所有变量的信息: disp
- 解除输出变量大小限制: set max-value -size unlimited, (例: 输出大数组)
- 删除对某个变量的跟踪 del dis [追踪变量编号].编号从1开始,会在添加成功后显示在屏幕上
- 监视某个变量的变化: watch [变量名] 在该变量当前值发生变化的地方设置断点,代码
开始运行后才能使用 - 删除对某个变量的监视: del [监视变量编号],编号规则同上
- 显示堆栈信息: bt, 在屏幕上输出当前堆栈中的信息
- 退出gdb界面: q
- 无其他输入,直接回车会执行上一条命令
- 执行时,如果当前行开头有(gdb) 字样,说明系统正等待gdb命令,否则说明程序正在运行或者等待程序本身的输入