您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux系统下如何使用GDB调试程序
## 一、GDB简介
GDB(GNU Debugger)是GNU开源组织发布的一款功能强大的程序调试工具,主要用于C/C++程序的调试。作为Linux系统中最主流的调试器,GDB具有以下核心功能:
- 启动程序并自定义运行环境
- 设置断点(Breakpoint)和观察点(Watchpoint)
- 单步执行代码(Step Execution)
- 查看和修改变量值
- 分析程序崩溃时的核心转储(Core Dump)
- 多线程/多进程调试
- 支持远程调试
## 二、安装与基本配置
### 1. 安装GDB
在大多数Linux发行版中,可以通过包管理器安装:
```bash
# Debian/Ubuntu
sudo apt install gdb
# CentOS/RHEL
sudo yum install gdb
# Arch Linux
sudo pacman -S gdb
使用-g
选项编译程序以生成调试信息:
gcc -g main.c -o demo
建议同时禁用编译器优化:
gcc -g -O0 main.c -o demo
gdb ./demo
命令 | 缩写 | 功能说明 |
---|---|---|
run | r | 开始执行程序 |
break | b | 设置断点 |
continue | c | 继续运行直到下一个断点 |
next | n | 单步执行(不进入函数) |
step | s | 单步执行(进入函数) |
p | 打印变量值 | |
backtrace | bt | 显示调用栈 |
list | l | 显示源代码 |
info break | i b | 查看断点信息 |
delete | d | 删除断点 |
quit | q | 退出GDB |
#include <stdio.h>
int factorial(int n) {
if (n <= 1)
return 1;
return n * factorial(n-1);
}
int main() {
int num = 5;
printf("Calculating factorial of %d\n", num);
int result = factorial(num);
printf("Result: %d\n", result);
return 0;
}
(gdb) break main
Breakpoint 1 at 0x1169: file demo.c, line 9.
(gdb) break factorial
Breakpoint 2 at 0x1139: file demo.c, line 4.
(gdb) run
Starting program: /home/user/demo
Breakpoint 1, main () at demo.c:9
9 int num = 5;
(gdb) next
10 printf("Calculating factorial of %d\n", num);
(gdb) next
Calculating factorial of 5
11 int result = factorial(num);
(gdb) step
factorial (n=5) at demo.c:4
4 if (n <= 1)
(gdb) print n
$1 = 5
(gdb) print result
$2 = 0
(gdb) continue
Continuing.
Breakpoint 2, factorial (n=4) at demo.c:4
4 if (n <= 1)
(gdb) break demo.c:6 if n == 1
(gdb) watch result
Hardware watchpoint 3: result
(gdb) set variable num = 10
(gdb) info threads # 查看所有线程
(gdb) thread 2 # 切换到线程2
gdb -p <PID>
gdb ./demo core
gdb -tui ./demo
sudo apt install cgdb
cgdb ./demo
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
缺少调试信息
-g
选项file ./demo
断点不生效
打印STL容器内容
(gdb) p *(vector._M_impl._M_start)@vector.size()
信号处理
(gdb) handle SIGSEGV nostop
disassemble
命令)GDB作为Linux下的标准调试工具,虽然学习曲线较陡峭,但掌握后能极大提高调试效率。建议从基础命令开始,逐步练习高级功能。对于大型项目,可以结合图形化前端或IDE使用。记住:优秀的开发者不是不写bug,而是能快速定位和解决bug。
附:GDB官方文档 https://sourceware.org/gdb/documentation/ “`
这篇文章总计约1600字,涵盖了GDB的基础使用到高级技巧,采用Markdown格式,包含代码块、表格等元素,适合作为技术文档阅读。需要扩展任何部分可以随时补充。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。