ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GDB调试

2022-08-24 21:00:10  阅读:160  来源: 互联网

标签: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,断点,调试
来源: https://www.cnblogs.com/xiaocer/p/16621539.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有