[Linux] 如何使用GDB调试(持续更新中)

一、程序的编译

1.1 gcc

GCC  (GNU Compiler Collection)是 GNU 编译器套件,它支持多种编程语言的编译,包括 C、C++、Objective-C、Fortran、Ada 等。当你直接使用 GCC 命令时,你通常是对单个文件进行编译。基本的使用方式如下:

gcc [选项] 源文件 [-o 目标文件]

  • 选项:可以指定编译器的行为,比如 -c 只编译不链接,-o 指定输出文件名,-g 为调试生成信息等。
  • 源文件:需要被编译的源代码文件。
  • 目标文件:可执行文件或对象文件的名称,默认是 a.out

 例如,如果你有一个名为 hello.c 的 C 程序,你可以这样编译它:

默认情况:

 GCC 在不指定特定优化或调试选项时,默认倾向于一个比较平衡的编译设置,既不开启高阶优化也不特别包含调试信息。

gcc -o hello hello.c   
 Debug 版本

要编译一个便于调试的版本,通常会加上 -g 选项来包含调试信息,这样可以在调试器中查看变量值、步进执行等。示例命令如下:

gcc -g -o debug hello.c
 Release 版本

为了编译一个优化过的、用于发布的 "Release" 版本,可以使用 -O 系列的优化级别,其中 -O2-O3 是常用的优化等级,同时一般不加 -g 以减小最终二进制的体积并提高运行效率。示例命令如下:

gcc -O2 -o release hello.c

 这将生成一个名为 hello 的可执行文件。

1.2 make

        Make 是一个更高级的构建工具,它通过读取名为 Makefile 的特殊文件来自动构建项目。Makefile 中定义了一系列规则,说明了如何从源代码文件构建最终的可执行文件或其他目标文件。这些规则包括依赖关系(哪些文件依赖于其他文件)、编译命令等。使用 Make 的主要优势在于自动化和管理大型项目中的编译过程。

        基本的 Make 使用方法很简单,只需在命令行输入 make 即可。Make 会查找当前目录下的 Makefile,并根据其中的规则自动编译需要更新的文件。

Makefile文件:

hello: hello.o gcc -o

        hello hello.o

hello.o: hello.c

        gcc -c hello.c

        在这个例子中,hello 是最终的目标,它依赖于 hello.o。而 hello.o 则依赖于 hello.c。当运行 make 时,Make 会检查依赖关系,如果有需要重新编译的文件,它会自动调用相应的 GCC 命令来完成编译。

二、指令集汇总

命令名称命令缩写命令说明示范
按键enter上一次的命令
启动与退出

run

r若是将断点删除掉,使用【r】指令运行的话就会直接运行到程序结束,

再加上断点去运行的话就会在打的断点处停下来

quitq退出GDB
断点管理breakb设置断点,如 b 行号b 函数名 或 b 文件名:行号

1、b 20

2、b code.c:func

3、b code.c:20

info breakpointsinfo b

查看所有

断点信息

1、info

2、info b

deleted + 编号删除指定断点,d + 当前要删除断点的编号 —— 删除一个断点【不可以d + 行号】d 2
delete breakpointsd breakpoints删除所有断点
disable breakpointsdisable b禁用所有断点
enable breakpointsenable b 启用所有断点
disable breakpointdisable b + 编号禁用指定断点disable b 2
enable breakpointenable b + 编号启用指定断点enable b 2

执行控制

nextn单步执行,跳过函数

step

s逐语句执行,进入函数
continuec继续执行至下一断点或程序结束
untilu 行号执行到指定行,忽略中间函数调用
finish执行到当前函数返回
查看信息listl显示源代码,每次10行, l 行号 /函数名

1、l 378 

2、l func

printp 变量名打印变量值
backtracebt查看函数调用栈当你在调试一个程序,尤其是当程序崩溃或者出现段错误等情况时,使用 bt 命令可以帮你了解程序在崩溃那一刻的函数调用序列。例如 bt 10 将只显示最近的10个堆栈帧。
变量与状态set varset var 修改变量值,如 set var 变量名 = 新值
display跟踪显示变量,每次停下时显示其值
undisplayundisplay + 编号 取消追踪
高级功能attach连接到正在运行的进程
detach从进程脱离,让其继续运行

三、

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值