Linux的调试工具 - gdb
- 1. 背景
- 2. 开始使用
- 指令的使用都用下面这个C语言简单小代码来进行演示:
- 1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。
- 2. list或l 函数名:列出某个函数的源代码。
- 3. r或run: 运行程序。
- 4. break或b 行号:在某一行设置断点
- 5. n或next:单条执行(类似vs中的F10)
- 6. s或step:进入函数调用(类似vs中的F11)
- 7. break 函数名:在某个函数开头设置断点
- 8. info break或info b:查看断点信息。
- 9. finish:执行到当前函数返回,然后挺下来等待命令
- 10. p 变量:打印变量值。
- 11. continue或c:从当前位置开始连续而非单步执行程序
- 12. run或r:从开始连续而非单步执行程序
- 13. delete breakpoints:删除所有断点
- 14. delete breakpoints n:删除序号为n的断点
- 15. disable breakpoints:禁用断点
- 16. enable breakpoints:启用断点
- 17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值
- 18. undisplay:取消对先前设置的那些变量的跟踪
- 19. until X(行号):跳至X行
- 20. breaktrace或bt:查看各级函数调用及参数
- 21. q或quit:退出gdb
1. 背景
- 程序的发布方式有两种,debug模式和release模式
- Linux gcc/g++出来的二进制程序,默认是release模式
- 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,发布成debug模式
2. 开始使用
指令的使用都用下面这个C语言简单小代码来进行演示:
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行。
例:l 0
2. list或l 函数名:列出某个函数的源代码。
例:l SumAdd
3. r或run: 运行程序。
注: 如果没有断点,程序将运行到底
例:r
4. break或b 行号:在某一行设置断点
例:b 3
5. n或next:单条执行(类似vs中的F10)
注: 单条执行需要在调试启动的情况下进行,需要先打断点,然后r执行到断点位置
例:n
6. s或step:进入函数调用(类似vs中的F11)
例:s
7. break 函数名:在某个函数开头设置断点
例:break SumAdd
8. info break或info b:查看断点信息。
例:info b
9. finish:执行到当前函数返回,然后挺下来等待命令
例:finish
10. p 变量:打印变量值。
例:p sum
11. continue或c:从当前位置开始连续而非单步执行程序
例:c
12. run或r:从开始连续而非单步执行程序
r
13. delete breakpoints:删除所有断点
例;delete breakpoints
14. delete breakpoints n:删除序号为n的断点
delete breakpoints 5
15. disable breakpoints:禁用断点
例:disable breakpoints
16. enable breakpoints:启用断点
例:enable breakpoints
17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值
例:display sum
18. undisplay:取消对先前设置的那些变量的跟踪
例:undisplay
19. until X(行号):跳至X行
例:until 11
20. breaktrace或bt:查看各级函数调用及参数
例:bt
21. q或quit:退出gdb
例:q
(本章完)