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

(本章完)

相关推荐
weixin_6042366715 小时前
华三 路由器 极简核心配置
运维·服务器·网络·h3c·h3c路由器
鹤落晴春16 小时前
【Linux复习】管理SELinux安全性
linux·运维·服务器
yz_aiks16 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
AI智图坊16 小时前
多件装组合SKU图的批量生产效率分析:从PS手工到AI自动化的工作流改造
大数据·运维·人工智能·gpt·ai作画·自动化·aigc
bjzhang7518 小时前
CentOS下安装MySQL详解
linux·mysql·centos
Jason_chen19 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld19 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
lizhihai_9920 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
云计算磊哥@21 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
weixin_5231853221 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端