摘要
本文以一个简单程序的调试为例,简述gdb调试流程以及各类gdb命令的用法。
gdb简介
gdb全称为GNU Debugger,是一个开源调试器,主要功能如下:
- 断点调试:在代码中设置断点,以便在程序执行到指定位置时停下来,从而进行逐行调试。
- 变量和内存查看:查看程序的变量、数组、结构体等数据的值,以及检查内存的内容。
- 执行控制:手动控制程序的执行,如单步执行、跳过函数调用、运行到下一个断点等。
- 回溯和调用栈:显示当前程序的函数调用栈,帮助你了解程序的调用关系和调用路径。
- 多线程调试:调试多线程程序,可以查看和控制不同线程的执行状态,以及设置线程相关的断点和观察点。
- 信号处理:让程序收到信号时停止执行,并提供一些命令来检查和处理信号。
- 核心转储分析:分析应用程序崩溃时生成的核心转储(core dump)文件,查看崩溃时的调用栈和内存。
- 扩展性:提供了丰富的扩展机制,允许用户编写自定义的Python脚本来扩展和增强调试功能。
gdb提供了丰富的功能和命令,使开发者能够全面深入地分析程序的运行流程和逻辑缺陷。
gdb实验环境
学习gdb调试,可以用真实的Linux操作系统,如Ubuntu、CentOS等,也可以在Windows上安装仿真的Linux开发环境,如MSYS2、WSL等。本文以Ubuntu 22.04 LTS真实开发环境为例进行讲解。
安装实验必备工具链:
sudo apt install vim
sudo apt install gcc
sudo apt install gdb
vim用法可参考vim简明教程。
进入~目录,用vim创建hello.c文件:
cd ~
vim hello.c
在打开的vim编辑器输入如下代码:
#include <stdio.h>
int main(int argc, const char **argv) {
printf("hello, world.\n");
return 0;
}
保存并退出vim,用gcc编译hello.c:
#-g表示生成调试信息,-O0表示禁用优化,-o指定生成的可执行文件名。
gcc -g -O0 hello.c -o hello
本文将可执行程序hello作为示例调试目标。
gdb启动方式
gdb启动方式有4种:
- 调试可执行程序,例如:gdb ./program。
- 调试到运行