Linux编译四组件(三):gdb篇

276 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

gdb

gdb是一个命令行版本的调试工具,相比于VS等的调试器没有图形界面,无法直观的获取变量值得变化与压栈情况,所以是没有那么容易入手的

这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。 所谓“寸有所长,尺有所短”就是这个道理

Visual Studio中调试的核心思想在gdb中也适用:

  1. 打断点
  2. F5继续执行

这样的按下快捷方式的调试方式与gdc是有些不同的,gdb是通过许多指令(命令行)来完成调试的。以下演示开始:

  • 要想进行调试,其实是针对最终的可执行程序进行调试,所以需要先进行编译
  1. 编写程序 我在这里举例创建一个main.c文件,vim进入后编写完成代码

  2. 输入指令,进入gdb界面:

gcc main.c -o main  -g				//Debug版本
gdb main

与Debug版本同级的还有release版本,有兴趣可以了解一下

输入完指令就进入gdb的界面了

  1. break + 行号/函数名 在此行或者函数首打上断点

这里我输入了break + Add函数名,所以调试器告诉我在第8行的Add函数已经被打上断点了。

例如想要在代码第10行打上断点,可以缩写为b 10

那第8行到底在哪儿? 为了方便起见,给大家一个小建议,打开两个终端,放置于右边窗口 这样你就可以看着代码进行调试了,十分方便直观。

  1. info break 查看当前断点

调试器显示当前只有一个我打上的断点,是位于main.c文件的第8行的。

  1. del + 断点的编号 删除已有断点

断点编号就是Num所对应的数字,例如所属与它的1

  1. run 代码从头开始运行,触发断点就会停止,缩写为r

(输入gdb,被调试的程序其实还未开始执行,当输入run才真正开始执行)

  1. continue让程序继续运行,缩写为c

程序遇到断点,就会被停止下来。如果想要继续运行就输入指令continue

VS 中的F5相当于同时具备了 run + continue gdb 中就将而二者分开了

  1. print + 变量名 查看当前情况变量的信息,缩写为p

  2. list 展示当前语句附近代码,缩写为l

笔者觉得有输入这种专门显示附近代码的指令的时间不如再打开一个终端来的直接,一劳永逸啊~

  1. bt 查看当前调用栈 (例如:递归函数的调用栈)

这里bt后显示内容说明main函数调用了Add函数

  1. next 单步执行,一次执行一行语句,缩写为n,相当于VS中的F11

总结:gdb虽然相比于VS等的调试器没有图形界面,但是瑕不掩瑜,它仍是Linux中可以独当一面的调试器。