介绍

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

常见的调试工具都是图形界面方式的,像VSCode、Qt等这些编译器自带的调试工具,但是当我们进行开发UNIX平台软件或者涉及交叉编译等开发工作时,这些图形化调试器就没有那么大的优势,而GDB调试工具此时就能做到图形化调试器所完不成的功能。

一般来说,GDB主要帮助你完成如下四个方面的内容:

  1. 启动程序,可以按照你的自定义要求随心所欲的运行程序;
  2. 可让被调试的程序在你所指定的调至的断点处挺住;
  3. 当程序被停住时,可以检查此时你的程序中所发生的事;
  4. 动态改变你程序的执行环境;

使用

  • 源文件
//1.cpp
  1 #include <stdio.h>
  2 
  3 int func(int n)
  4 {  
  5    int sum = 0, i; 
  6    for (i = 0; i < n; i++)
  7    {  
  8       sum += i;
  9    }
 10 
 11    return sum;
 12 
 13 }
 14 
 15 int main()
 16 {
 17 
 18     int i;
 19     int result = 0;
 20      for (i = 0; i <= 100; i++)
 21      {
 22       result += i;
 23      }
 24 
 25      printf("result[1-100] = %d /n", result);
 26      printf("result[1-250] = %d /n", func(250));
 27 
 28     return 0;
 29 
 30 }

  • 编译

    gcc -g 1.cpp gdb
    

如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

编译后会生成binary文件:

在这里插入图片描述

  • 调试:

    1. 启动调试窗口:

      gdb gdb # gdb <binary 文件>
      

      在这里插入图片描述

GDB启动后可以加一些启动开关,如-s(读取符号表)、-core(调试时 core dump的core文件)、-directory (加入一个源文件的搜索路径)

  1. 进入到调试命令后即可进入调试模式,输入命令可以执行对应的操作:

    如输入l,即可查看源码:

    在这里插入图片描述

常用命令如下:

常用命令含义
break 行号设置断点
break 函数名在函数入口处,设置断点
info break查看断点信息
llist,查看源码
rrun, 运行程序c
ccontinue, 在for中继续运行程序
p <变量名>print, 打印<变量名>的值
bt查看函数堆栈
finish退出函数
q退出gdb
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐