首页 > 其他分享 >GDB调试

GDB调试

时间:2022-08-24 21:00:38浏览次数:45  
标签:core 文件 args gdb 行号 GDB 断点 调试

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.显示源文件代码

  1. l[ist]:查看主函数的源码。默认只显示主函数所在文件的十行,需要显示更多的话敲回车。
  2. l[ist] xxx.c:行号:查看某个文件从指定的行号开始显示十行

7.设置断点调试:

  1. 指定行号加断点:b[reak] 行号,默认在主函数所在文件的行号
  2. 指定函数名加断点:b[reak] 函数名
  3. 指定文件对应的行:b[reak] xxx.c:行号
  4. 设置条件断点: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文件

  1. 查看core文件的大小:
ulimit -c
0
  1. 设置生成core的大小
##设置core文件大小1024
ulimit -c 1024
##设置core文件大小无限制
ulimit -c unlimited
  1. 设置core文件的格式
  2. 查看core文件:gdb 可执行文件名 core

标签:core,文件,args,gdb,行号,GDB,断点,调试
From: https://www.cnblogs.com/xiaocer/p/16621539.html

相关文章