GDB调试
因为下面内容都是以~/练习/include/目录下的example.c文件来示例的,故附上example.c文件内容:
#include <stdio.h>
int main(int argc,const char* args[])
{
int a = 100;
float b = 200.0;
printf("HelloWorld\n");
printf("%f\n",a + b);
int c = argc;
const char* str1 = args[1];
const char* str2 = args[2];
printf("%d%s%s\n",c,str1,str2);
printf("%s\n",args[0]);
return 0;
}
1.启动gdb这个调试程序前需要做的事情
1.-g: 在编译成目标可执行程序时加上-g选项,就会在生成目标可执行程序文件中加入调试信息。
gcc -o result.exe -g example.c
2.启动GDB: gdb 可执行程序名
gdb result.exe
2.gdb调试程序的一些方法
1.在gdb调试程序里运行可执行程序: 输入run或者r即可,即r[un]
(gdb) run
##或者
(gdb) r
2.start:开启分步调试,停留在main函数
(gdb) start
Temporary breakpoint 1 at 0x40056c: file example.c, line 5.
Starting program: /home/xiaocer/练习/include/result.exe
Temporary breakpoint 1, main (argc=1, args=0x7fffffffe4f8) at example.c:5
3.n[xet]: 执行下一步指令
4.s[tep]: 执行下一条指令,可以进入函数内部,但是库函数不能进入。
5.设置主函数启动的参数: set args xxx1 xxx2,当然了这个等同于run xxx1 xxx2。run xxx1 xxx2也可以设置程序启动的参数。也等同于set args[1] = "xxx1" set args[2] = "xxx2";args[0]的值默认是可执行程序名。
6.显示源文件代码
- l[ist]:查看主函数的源码。默认只显示主函数所在文件的十行,需要显示更多的话敲回车。
- l[ist] xxx.c:行号:查看某个文件从指定的行号开始显示十行
7.设置断点调试:
- 指定行号加断点:b[reak] 行号,默认在主函数所在文件的行号
- 指定函数名加断点:b[reak] 函数名
- 指定文件对应的行:b[reak] xxx.c:行号
- 设置条件断点:b[reak] 行号 条件
8.查看已经设置好的断点信息: i[nfo] b[reak],这样得到number
9.删除断点: d[el] number
10.跳到下一断点: c[ontinue]
11.p[rint] 变量名: 打印变量的值
12.ptype 变量名: 打印变量的类型
13.跟踪某个变量的值: display 变量名.
14.取消跟踪某个变量: undisplay
number,查看number info display。
3.退出gdb这个调试程序
1.q[uit]: 退出gdb调试程序
4.gdb跟踪core文件
- 查看core文件的大小:
ulimit -c
0
- 设置生成core的大小
##设置core文件大小1024
ulimit -c 1024
##设置core文件大小无限制
ulimit -c unlimited
- 设置core文件的格式
- 查看core文件:gdb 可执行文件名 core