文章目录
本课程适合有 C 语言基础,想做练手项目的同学,可以有效的学习 GDB 的进入和退出,设置断点,单步调试以及函数栈
等调试功能,做一些有趣的事情。
wget http://labfile.oss.aliyuncs.com/courses/496/gdbtest.zip
unzip gdbtest.zip
请确认文件保存在目录:“/home/shiyanlou/gdbtest/” 下。
这两个程序分别为:
- debugging.c 程序:只有一个源文件,这是一个简单的求和程序,计算 1+2+3+…+100 的值。程序存在bug,导致预期结果并不为 5050,我们将在本节实验中调试并修复 BUG。
- 链表程序:本例的程序来源于 github,程序定义了数据结构链表,并使用了三个测试函数进行测试,程序仍然有 BUG,需要我们使用 GDB 去发现。
1、GDB 常用命令实战
1 GDB 的基本介绍
GDB 基础知识:
GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。
GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段
。在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。
在终端输入以下命令安装 GDB:
sudo apt-get install gdb
GDB 的进入和退出
- 如果要调试程序,需要在 gcc 编译可执行程序时加上
-g
参数,首先我们编译 bugging.c 程序,生成可执行文件:
gcc bugging.c -o bugging -g -m32
其中 -o
指定输出文件名, 实验楼的环境是 64 位的操作系统,所以默认会编译为 64 位的程序,添加 -m32 选项可以编译为 32 位。
- 如果在你的环境里编译报错,请安装 libc6-dev-i386 后再次编译:
sudo apt-get install libc6-dev-i386
- 输入
gdb bugging
进入 gdb 调试 bugging 程序的界面:
gdb bugging
- 在 gdb 命令行界面,输入run 执行待调试程序:
(gdb) run
- 在 gdb 命令行界面,输入quit 退出 gdb:
(gdb) quit
GDB 命令行界面使用技巧
命令补全:
任何时候都可以使用
TAB
进行补全,如果只有一个待选选项则直接补全;否则会列出可选选项,继续键入命令,同时结合TAB
即可快速输入命令。
部分 gdb 常用命令一览表:
命令 | 简写形式 | 说明 |
---|---|---|
list | l | 查看源码 |
backtrace | bt、where | 打印函数栈信息 |
next | n | 执行下一行 |
step | s | 一次执行一行,遇到函数会进入 |
finish | 运行到函数结束 | |
continue | c | 继续运行 |