Linux的调试工具 - gdb(超详细)

Linux的调试工具 - gdb

  • [1. 背景](#1. 背景)
  • [2. 开始使用](#2. 开始使用)
    • 指令的使用都用下面这个C语言简单小代码来进行演示:
    • [1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。](#1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。)
    • [2. list或l 函数名:列出某个函数的源代码。](#2. list或l 函数名:列出某个函数的源代码。)
    • [3. r或run: 运行程序。](#3. r或run: 运行程序。)
    • [4. break或b 行号:在某一行设置断点](#4. break或b 行号:在某一行设置断点)
    • [5. n或next:单条执行(类似vs中的F10)](#5. n或next:单条执行(类似vs中的F10))
    • [6. s或step:进入函数调用(类似vs中的F11)](#6. s或step:进入函数调用(类似vs中的F11))
    • [7. break 函数名:在某个函数开头设置断点](#7. break 函数名:在某个函数开头设置断点)
    • [8. info break或info b:查看断点信息。](#8. info break或info b:查看断点信息。)
    • [9. finish:执行到当前函数返回,然后挺下来等待命令](#9. finish:执行到当前函数返回,然后挺下来等待命令)
    • [10. p 变量:打印变量值。](#10. p 变量:打印变量值。)
    • [11. continue或c:从当前位置开始连续而非单步执行程序](#11. continue或c:从当前位置开始连续而非单步执行程序)
    • [12. run或r:从开始连续而非单步执行程序](#12. run或r:从开始连续而非单步执行程序)
    • [13. delete breakpoints:删除所有断点](#13. delete breakpoints:删除所有断点)
    • [14. delete breakpoints n:删除序号为n的断点](#14. delete breakpoints n:删除序号为n的断点)
    • [15. disable breakpoints:禁用断点](#15. disable breakpoints:禁用断点)
    • [16. enable breakpoints:启用断点](#16. enable breakpoints:启用断点)
    • [17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值](#17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值)
    • [18. undisplay:取消对先前设置的那些变量的跟踪](#18. undisplay:取消对先前设置的那些变量的跟踪)
    • [19. until X(行号):跳至X行](#19. until X(行号):跳至X行)
    • [20. breaktrace或bt:查看各级函数调用及参数](#20. breaktrace或bt:查看各级函数调用及参数)
    • [21. q或quit:退出gdb](#21. q或quit:退出gdb)

1. 背景

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,发布成debug模式

2. 开始使用

指令的使用都用下面这个C语言简单小代码来进行演示:

clike 复制代码
  1 #include <stdio.h>
  2 
  3 int SumAdd(int x)
  4 {
  5     int i=1;
  6     int sum=0;
  7     for(i=1;i<=x;i++)
  8     {
  9         sum+=i;
 10     }
 11     return sum;
 12 }
 13 
 14 int main()
 15 {
 16     printf("%d \n",SumAdd(100));
 17     return 0;
 18 }            

1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。

clike 复制代码
例:l 0

2. list或l 函数名:列出某个函数的源代码。

clike 复制代码
例:l SumAdd

3. r或run: 运行程序。

注: 如果没有断点,程序将运行到底

clike 复制代码
例:r

4. break或b 行号:在某一行设置断点

clike 复制代码
例:b 3

5. n或next:单条执行(类似vs中的F10)

注: 单条执行需要在调试启动的情况下进行,需要先打断点,然后r执行到断点位置

clike 复制代码
例:n

6. s或step:进入函数调用(类似vs中的F11)

clike 复制代码
例:s

7. break 函数名:在某个函数开头设置断点

clike 复制代码
例:break SumAdd

8. info break或info b:查看断点信息。

clike 复制代码
例:info b

9. finish:执行到当前函数返回,然后挺下来等待命令

clike 复制代码
例:finish

10. p 变量:打印变量值。

clike 复制代码
例:p sum

11. continue或c:从当前位置开始连续而非单步执行程序

clike 复制代码
例:c

12. run或r:从开始连续而非单步执行程序

clike 复制代码
r

13. delete breakpoints:删除所有断点

clike 复制代码
例;delete breakpoints

14. delete breakpoints n:删除序号为n的断点

clike 复制代码
delete breakpoints 5

15. disable breakpoints:禁用断点

clike 复制代码
例:disable breakpoints

16. enable breakpoints:启用断点

clike 复制代码
例:enable breakpoints

17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值

clike 复制代码
例:display sum

18. undisplay:取消对先前设置的那些变量的跟踪

clike 复制代码
例:undisplay

19. until X(行号):跳至X行

clike 复制代码
例:until 11

20. breaktrace或bt:查看各级函数调用及参数

clike 复制代码
例:bt

21. q或quit:退出gdb

clike 复制代码
例:q

(本章完)

相关推荐
China_Yanhy7 分钟前
区块链运维日记 · 第 1 日 :消失的 2000 笔提现 —— 致命的 Nonce 冲突
运维·区块链
趁着年轻吃点苦1 小时前
录用通知-自助系统的服务器部署指南
运维·服务器
仗剑恬雅人1 小时前
LINUX数据库高频常用命令
linux·运维·服务器·数据库·ssh·运维开发
CAAS_IFR_zp1 小时前
PICRUSt2-SC:16s功能注释的更新
服务器
LetsonH1 小时前
服务器配置(开机自启+XRDP远程)
运维·服务器
Getgit2 小时前
Linux系统的特点有哪些
java·linux·运维·网络·sql
壮哥_icon2 小时前
Ubuntu 虚拟机中编译 Android 源码完整指南(含分卷合并、虚拟内存配置、复制粘贴设置及依赖库安装)
linux·运维·ubuntu
weixin_395448912 小时前
tidl_import_mul_rmfsd_psd_u8_3x480x544_bise_raw_dynamic.txt
java·服务器·前端
Maggie_ssss_supp2 小时前
Linux-Percona XtraDB Cluster (PXC)集群部署实战
linux·运维·服务器
十月南城3 小时前
压测方法论——目标、场景、指标与容量评估的闭环
运维·web安全·ci/cd·微服务·云计算