-g 选项
生成Debug模式下的文件:gcc -o process-Dubeg process.c -g

我们发现Dubge文件体积比release文件体积要大一些,因为Debug文件里面多了调试信息并且我们会发现,Dubge文件和release文件都可以运行
readelf process.exe-Debug -S//查看一个可执行程序对应的二进制文件
readelf process.exe-Debug -S | grep debug//将二进制文件中和debug有关的部分过滤出来
为了演示gdb命令的使用方法,以下面这个代码为例:
#include<stdio.h>
int AddToTarget(int start,int end)
{
int i=start;
int sum=0;
for(;i<=end;i++)
{
sum+=i;
}
return sum;
}
int main()
{
printf("run begin...\n");
int res=AddToTarget(1,100);
printf("%d\n",res);
printf("run end...\n");
return 0;
}
~gdb binFile进入gdb环境,其中binFile是一个可执行程序
q或者quit指令可退出
list或者l:现实binFile源代码,接着上次的位置往下列,每次10行。
l num或者list num:num是行号,将源代码的第num行在中间位置显示,每次10行。
l Fun_name或者list Fun_name:Fun_name是函数名,列出某个函数的源代码
l 文件名:num/Fun_name或者list 文件名:num/Fun_nameTip: gdb会默认记录上一步操作,如果想要显示整个文件内容,首先可以从最开始显示l 0,紧接着直接l,每次显示10行,直到结束为止。此时就把所有内容显示出来了。或者l 0之后,连续按Enter键,直到完全显示。

run或者r:运行,类似于VS中的F5
程序正常执行,这里程序只是运行,无法调试
b num或者b Fun_name:打断点,可以在行号num处打断点,可以在名为Fun_name的函数处打断点。另外,断点只能一个一个打。
info b或者i b:查看断点信息
d num:num为断点编号

disable num:num为断点编号,忽略某个断点,即关闭某个断点
enable num:num为断点编号,启用该断点
n或next:逐过程,单条执行,当有函数调用时,不会进入函数内部。
s或step:逐语句,进入函数调用
p 变量:打印变量的值和地址

display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay num:取消对先前设置的那些变量的追踪,其中num是先前设置的跟踪变量所对应的编号
until x:跳至x行,可以让我们快速的运行代码块
finish:执行完当前函数返回,然后停下来等待命令
continue或c:从当前断点直接运行到下一个断点处

set var:修改变量的值。
bt:查看各级函数调用及参数。