软件发布的模式有两种,分别是 debug 模式和 release 模式。以 vs2022 为例:
一般程序员在写代码开发期间是处于 debug 模式,当自己的软件写好了自测也通过了,发布软件时是以 release 模式来发布的。
Windows 中在 vs 编好的程序默认在 debug 模式下是可以直接调试的,但在 Linux 下编译好的程序能否直接进行调试?答案是不能!下面举个例子。
随便找一个可执行程序演示一下:
gcc/g++默认的工作模式是 release 模式,编译好的代码不能直接进行调试。所以想要让自己的程序能够在 debug 模式下调试,需要在程序编译进行翻译的时候,需要加一个 -g 选项:
一句话总结:在 Linux 下程序要进行调试,必须处于 debug 模式,也就是在编译时加上 -g 选项。再说得直白一点,gdb 调试就是要调试携带调试信息的可执行文件!
1、快速认识 gdb
进入 gdb 开始调试:
gdb 可执行文件退出 gdb 环境:quit
进入 gdb 环境后想要查看程序的源代码输入 list(简写为 l 即可)并回车;也可以输入 l 行号,表示从某行开始展示源代码。使用 l 指令只能显示一部分源代码,若想显示剩余部分源代码按回车键即可。
也可以 l 指定文件名 查看指定文件的源代码,我这里只是演示,只有一个文件所以就不展示了
打断点:
b 行号
将断点打在第 19 行再输入 r(run)运行,就能直接停到断点处了。
想要直接将程序跑完,输入 c(continue)就可以了:
2、解决 gdb 难用的问题
前面已经演示了 gdb 的基本使用,但是使用的过程中会发现 gdb 太恶心人了,想查看源代码结果还与调试信息混在一起了,所以后面的演示统一使用cgdb,cgdb 和 gdb 是一模一样的,但是 cgdb 可以动态呈现我们的源代码。
用于测试 gdb 使用方法的样例代码:
#include <stdio.h>
int Sum(int s, int e){
int result = 0;
for(int i = s; i <= e; i++){
result += i;
}
return result;
}
int main(){
int start = 1;
int end = 100;
printf("I will begin\n");
n = Sum(start, end);
(, start, end, n);
;
}


