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

(本章完)