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

(本章完)

相关推荐
A 糖醋排骨24 分钟前
grafana loki alloy轻量级日志采集
运维·grafana·loki
林间码客3 小时前
从DevOps到DevSecOps:构建现代软件交付的基石与护城河
大数据·运维·devsecops·devops
李白你好4 小时前
Windows 离线 Linux 提权辅助查询工具
linux
Lust Dusk4 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu5 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
千千寰宇5 小时前
[Linux/Ollama] Termux : 一款运行在 Android 平台上的开源终端模拟器与 Linux 环境应用、支持在手机上基于Ollama部署LLM
linux
凌肖战5 小时前
TCP网络通信中setsockopt()函数解决地址已占用问题
服务器·网络·tcp/ip
轻揉小乔 真新人5 小时前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
Yan_chen6666 小时前
SSH(Secure Shell)安全外壳协议详解
运维·网络协议·ssh
隔窗听雨眠6 小时前
OceanBase旁路导入与自增主键冲突深度解析:原理、排查与解决方案
java·服务器·数据库