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

(本章完)

相关推荐
pipip.16 分钟前
UDP————套接字socket
linux·网络·c++·网络协议·udp
zkmall19 分钟前
企业电商解决方案哪家好?ZKmall模块商城全渠道支持 + 定制化服务更省心
大数据·运维·重构·架构·开源
云资源服务商2 小时前
解锁阿里云日志服务SLS:云时代的日志管理利器
服务器·阿里云·云计算
绝不偷吃2 小时前
ELK日志分析系统
运维·elk·jenkins
朱包林3 小时前
day45-nginx复杂跳转与https
linux·运维·服务器·网络·云计算
孙克旭_3 小时前
day045-nginx跳转功能补充与https
linux·运维·nginx·https
孞㐑¥5 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
Hacker_Oldv5 小时前
软件测试(功能、工具、接口、性能、自动化、测开)详解
运维·自动化
Java樱木5 小时前
使用字节Trae + MCP,UI 到网页自动化。
运维·自动化
柳鲲鹏6 小时前
WINDOWS最快布署WEB服务器:apache2
服务器·前端·windows