资料介绍
3.4 gdb调试器
调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好、更快地定位程序中的问题从而加快程序开发的进度,是大家都很关注的问题。就如读者熟知的Windows下的一些调试工具,如Visual Studio自带的设置断点、单步跟踪等,都受到了广大用户的赞赏。那么,在Linux下有什么很好的调试工具呢?
gdb调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也足以与微软的Visual Studio等工具媲美。下面就请跟随笔者一步步学习gdb调试器。
3.4.1 gdb使用流程
这里给出了一个短小的程序,由此带领读者熟悉gdb的使用流程。建议读者能够动手实际操作一下。
首先,打开Linux下的编辑器vi或者emacs,编辑如下代码(由于为了更好地熟悉gdb的操作,笔者在此使用vi编辑,希望读者能够参见3.3节中对vi的介绍,并熟练使用vi)。
/*test.c*/
#include 《stdio.h》
int sum(int m);
int main()
{
int i, n = 0;
sum(50);
for(i = 1; i《= 50; i++)
{
n += i;
}
printf(“The sum of 1-50 is %d \n”, n );
}
int sum(int m)
{
int i, n = 0;
for (i = 1; i 《= m; i++)
{
n += i;
printf(“The sum of 1-m is %d\n”, n);
}
}
在保存退出后首先使用gcc对test.c进行编译,注意一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件。
[root@localhost gdb]# gcc -g test.c -o test
虽然这段程序没有错误,但调试完全正确的程序可以更加了解gdb的使用流程。接下来就启动gdb进行调试。注意,gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试。
[root@localhost gdb]# gdb test
GNU gdb Red Hat Linux (6.3.0.0-1.21rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-redhat-linux-gnu”。..Using host libthread_db library “/lib/libthread_db.so.1”。
(gdb)
可以看出,在gdb的启动画面中指出了gdb的版本号、使用的库文件等信息,接下来就进入了由“(gdb)”开头的命令行界面了。
(1)查看文件。
在gdb中键入“l”(list)就可以查看所载入的文件,如下所示。
注意在gdb的命令中都可使用缩略形式的命令,如“l”代表“list”,“b”代表“breakpoint”,“p”代表“print”等,读者也可使用“help”命令查看帮助信息。
(gdb) l
1 #include 《stdio.h》
2 int sum(int m);
3 int main()
4 {
5 int i,n = 0;
6 sum(50);
7 for(i = 1; i 《= 50; i++)
8 {
9 n += i;
10 }
(gdb) l
11 printf(“The sum of 1~50 is %d \n”, n );
12
13 }
14 int sum(int m)
15 {
16 int i, n = 0;
17 for(i = 1; i 《= m; i++)
18 {
19 n += i;
20 }
21 printf(“The sum of 1~m is = %d\n”, n);
20 }
可以看出,gdb列出的源代码中明确地给出了对应的行号,这样就可以大大地方便代码的定位。
(2)设置断点。
设置断点是调试程序中一个非常重要的手段,它可以使程序运行到一定位置时暂停。因此,程序员在该位置处可以方便地查看变量的值、堆栈情况等,从而找出代码的症结所在。
在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可(这是最常用的方式,另外还有其他方式设置断点),如下所示:
(gdb) b 6
Breakpoint 1 at 0x804846d: file test.c, line 6.
要注意的是,在gdb中利用行号设置断点是指代码运行到对应行之前将其停止,如上例中,代码运行到第6行之前暂停(并没有运行第6行)。
(3)查看断点情况。
在设置完断点之后,用户可以键入“info b”来查看设置断点情况,在gdb中可以设置多个断点。
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0804846d in main at test.c:6
用户在断点键入“backrace”(只输入“bt”即可)可以查到调用函数(堆栈)的情况,这个功能在程序调试之中使用非常广泛,经常用于排除错误或者监视调用堆栈的情况。
调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好、更快地定位程序中的问题从而加快程序开发的进度,是大家都很关注的问题。就如读者熟知的Windows下的一些调试工具,如Visual Studio自带的设置断点、单步跟踪等,都受到了广大用户的赞赏。那么,在Linux下有什么很好的调试工具呢?
gdb调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也足以与微软的Visual Studio等工具媲美。下面就请跟随笔者一步步学习gdb调试器。
3.4.1 gdb使用流程
这里给出了一个短小的程序,由此带领读者熟悉gdb的使用流程。建议读者能够动手实际操作一下。
首先,打开Linux下的编辑器vi或者emacs,编辑如下代码(由于为了更好地熟悉gdb的操作,笔者在此使用vi编辑,希望读者能够参见3.3节中对vi的介绍,并熟练使用vi)。
/*test.c*/
#include 《stdio.h》
int sum(int m);
int main()
{
int i, n = 0;
sum(50);
for(i = 1; i《= 50; i++)
{
n += i;
}
printf(“The sum of 1-50 is %d \n”, n );
}
int sum(int m)
{
int i, n = 0;
for (i = 1; i 《= m; i++)
{
n += i;
printf(“The sum of 1-m is %d\n”, n);
}
}
在保存退出后首先使用gcc对test.c进行编译,注意一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件。
[root@localhost gdb]# gcc -g test.c -o test
虽然这段程序没有错误,但调试完全正确的程序可以更加了解gdb的使用流程。接下来就启动gdb进行调试。注意,gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试。
[root@localhost gdb]# gdb test
GNU gdb Red Hat Linux (6.3.0.0-1.21rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-redhat-linux-gnu”。..Using host libthread_db library “/lib/libthread_db.so.1”。
(gdb)
可以看出,在gdb的启动画面中指出了gdb的版本号、使用的库文件等信息,接下来就进入了由“(gdb)”开头的命令行界面了。
(1)查看文件。
在gdb中键入“l”(list)就可以查看所载入的文件,如下所示。
注意在gdb的命令中都可使用缩略形式的命令,如“l”代表“list”,“b”代表“breakpoint”,“p”代表“print”等,读者也可使用“help”命令查看帮助信息。
(gdb) l
1 #include 《stdio.h》
2 int sum(int m);
3 int main()
4 {
5 int i,n = 0;
6 sum(50);
7 for(i = 1; i 《= 50; i++)
8 {
9 n += i;
10 }
(gdb) l
11 printf(“The sum of 1~50 is %d \n”, n );
12
13 }
14 int sum(int m)
15 {
16 int i, n = 0;
17 for(i = 1; i 《= m; i++)
18 {
19 n += i;
20 }
21 printf(“The sum of 1~m is = %d\n”, n);
20 }
可以看出,gdb列出的源代码中明确地给出了对应的行号,这样就可以大大地方便代码的定位。
(2)设置断点。
设置断点是调试程序中一个非常重要的手段,它可以使程序运行到一定位置时暂停。因此,程序员在该位置处可以方便地查看变量的值、堆栈情况等,从而找出代码的症结所在。
在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可(这是最常用的方式,另外还有其他方式设置断点),如下所示:
(gdb) b 6
Breakpoint 1 at 0x804846d: file test.c, line 6.
要注意的是,在gdb中利用行号设置断点是指代码运行到对应行之前将其停止,如上例中,代码运行到第6行之前暂停(并没有运行第6行)。
(3)查看断点情况。
在设置完断点之后,用户可以键入“info b”来查看设置断点情况,在gdb中可以设置多个断点。
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0804846d in main at test.c:6
用户在断点键入“backrace”(只输入“bt”即可)可以查到调用函数(堆栈)的情况,这个功能在程序调试之中使用非常广泛,经常用于排除错误或者监视调用堆栈的情况。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 串口/网络数据调试器 1次下载
- 基于OpenOCD和GDB的简单且廉价的步进调试器
- STM8-Debug 调试器使用
- Linux嵌入式 gdb VSCode图形化调试教程
- Microchip调试器(MDB)用户指南 19次下载
- 使用GDB调试程序的详细资料概述 0次下载
- PICKIT2硬件调试器的使用教程资料说明
- Microchip公司调试器(MDB)的详细中文资料概述
- 如何使用MPLAB ICD 3在线调试器的详细中文资料免费下载
- Microchip 调试器(MDB) 用户指南
- 使用在PICkit™ 3线调试器 5次下载
- 调试器模块(可按键调试) 11次下载
- GDB调试命令手册 9次下载
- 基于CodeWarrior集成开发环境的调试器原理 65次下载
- gdb使用指南
- 做了个DAPLink调试器,最高支持1500V隔离!静电多不了一点! 261次阅读
- 使用VSCode调试嵌入式程序:如何切换gdb server 1130次阅读
- jlink调试器的工作原理 2279次阅读
- 调试器连接MCU不稳定怎么办? 661次阅读
- 简述GDB调试器提供的基本功能 1090次阅读
- 什么是GDB?GDB的基本功能和命令总结 2951次阅读
- 针对嵌入式处理器的可配置LLDB底层调试器解析 582次阅读
- 通过GDB non-stop mode调试MySQL 492次阅读
- 什么是gdb的底层调试原理 716次阅读
- MPLAB ICD 3调试故障纠正措施 1395次阅读
- OpenHarmony系统如何使用gdb调试init 854次阅读
- QEMU+GDB调试ARM程序 2660次阅读
- Linux应用的GDB调试的原理及过程分析 3318次阅读
- Python调试器,快速定位各种疑难杂症 3030次阅读
- 基于SOPC的M8051调试器设计及系统测试 2608次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 92次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 10次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7蓝牙设备在嵌入式领域的广泛应用
- 0.63 MB | 3次下载 | 免费
- 89天练会电子电路识图
- 5.91 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233045次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多