01-GDB入门
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。常见的调试工具都是图形界面方式的,像VSCode、Qt等这些编译器自带的调试工具,但是当我们进行开发UNIX平台软件或者涉及交叉编译等开发工作时,这些图形化调试器就没有那么大的优势,而GDB调试工具此时就能做到图形化调试器所完不成的功能。
·
介绍
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
常见的调试工具都是图形界面方式的,像VSCode、Qt等这些编译器自带的调试工具,但是当我们进行开发UNIX平台软件或者涉及交叉编译等开发工作时,这些图形化调试器就没有那么大的优势,而GDB调试工具此时就能做到图形化调试器所完不成的功能。
一般来说,GDB主要帮助你完成如下四个方面的内容:
- 启动程序,可以按照你的自定义要求随心所欲的运行程序;
- 可让被调试的程序在你所指定的调至的断点处挺住;
- 当程序被停住时,可以检查此时你的程序中所发生的事;
- 动态改变你程序的执行环境;
使用
- 源文件
//1.cpp
1 #include <stdio.h>
2
3 int func(int n)
4 {
5 int sum = 0, i;
6 for (i = 0; i < n; i++)
7 {
8 sum += i;
9 }
10
11 return sum;
12
13 }
14
15 int main()
16 {
17
18 int i;
19 int result = 0;
20 for (i = 0; i <= 100; i++)
21 {
22 result += i;
23 }
24
25 printf("result[1-100] = %d /n", result);
26 printf("result[1-250] = %d /n", func(250));
27
28 return 0;
29
30 }
-
编译
gcc -g 1.cpp gdb
如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。
编译后会生成binary文件:
-
调试:
-
启动调试窗口:
gdb gdb # gdb <binary 文件>
-
GDB启动后可以加一些启动开关,如-s(读取符号表)、-core(调试时 core dump的core文件)、-directory (加入一个源文件的搜索路径)
-
进入到调试命令后即可进入调试模式,输入命令可以执行对应的操作:
如输入l,即可查看源码:
常用命令如下:
常用命令 | 含义 |
---|---|
break 行号 | 设置断点 |
break 函数名 | 在函数入口处,设置断点 |
info break | 查看断点信息 |
l | list,查看源码 |
r | run, 运行程序c |
c | continue, 在for中继续运行程序 |
p <变量名> | print, 打印<变量名>的值 |
bt | 查看函数堆栈 |
finish | 退出函数 |
q | 退出gdb |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)