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

(本章完)

相关推荐
用户9718356334663 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪4 小时前
linux 拷贝文件或目录到指定的位置
linux
大树8820 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠20 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质21 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush421 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52021 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz21 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理