Linux系统下如何使用GDB调试程序

发布时间:2022-01-24 14:23:00 作者:清风
来源:亿速云 阅读:255
# 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

2. 编译可调试程序

使用-g选项编译程序以生成调试信息:

gcc -g main.c -o demo

建议同时禁用编译器优化:

gcc -g -O0 main.c -o demo

三、基础调试命令

1. 启动GDB

gdb ./demo

2. 常用命令速查表

命令 缩写 功能说明
run r 开始执行程序
break b 设置断点
continue c 继续运行直到下一个断点
next n 单步执行(不进入函数)
step s 单步执行(进入函数)
print p 打印变量值
backtrace bt 显示调用栈
list l 显示源代码
info break i b 查看断点信息
delete d 删除断点
quit q 退出GDB

四、实际调试示例

示例程序(demo.c)

#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;
}

调试过程

  1. 设置断点
(gdb) break main
Breakpoint 1 at 0x1169: file demo.c, line 9.
(gdb) break factorial
Breakpoint 2 at 0x1139: file demo.c, line 4.
  1. 运行程序
(gdb) run
Starting program: /home/user/demo 

Breakpoint 1, main () at demo.c:9
9           int num = 5;
  1. 单步执行
(gdb) next
10          printf("Calculating factorial of %d\n", num);
(gdb) next
Calculating factorial of 5
11          int result = factorial(num);
  1. 进入函数
(gdb) step
factorial (n=5) at demo.c:4
4           if (n <= 1)
  1. 查看变量
(gdb) print n
$1 = 5
(gdb) print result
$2 = 0
  1. 继续执行
(gdb) continue
Continuing.

Breakpoint 2, factorial (n=4) at demo.c:4
4           if (n <= 1)

五、高级调试技巧

1. 条件断点

(gdb) break demo.c:6 if n == 1

2. 观察点(Watchpoint)

(gdb) watch result
Hardware watchpoint 3: result

3. 修改运行时的变量值

(gdb) set variable num = 10

4. 多线程调试

(gdb) info threads    # 查看所有线程
(gdb) thread 2       # 切换到线程2

5. 调试已运行的程序

gdb -p <PID>

6. 核心转储分析

gdb ./demo core

六、GDB增强工具

  1. GDB TUI模式(文本用户界面)
gdb -tui ./demo
  1. CGDB(更友好的界面)
sudo apt install cgdb
cgdb ./demo
  1. pwndbg/peda(增强功能)
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

七、常见问题解决

  1. 缺少调试信息

    • 确保编译时使用了-g选项
    • 检查是否被strip过:file ./demo
  2. 断点不生效

    • 确认源代码路径匹配
    • 使用完整路径设置断点
  3. 打印STL容器内容

    (gdb) p *(vector._M_impl._M_start)@vector.size()
    
  4. 信号处理

    (gdb) handle SIGSEGV nostop
    

八、最佳实践建议

  1. 使用版本控制(如git)记录代码变更
  2. 合理使用assert进行防御性编程
  3. 结合日志系统进行辅助调试
  4. 复杂项目建议使用IDE(如CLion、VS Code)集成GDB
  5. 学习阅读汇编代码(disassemble命令)

九、总结

GDB作为Linux下的标准调试工具,虽然学习曲线较陡峭,但掌握后能极大提高调试效率。建议从基础命令开始,逐步练习高级功能。对于大型项目,可以结合图形化前端或IDE使用。记住:优秀的开发者不是不写bug,而是能快速定位和解决bug。

附:GDB官方文档 https://sourceware.org/gdb/documentation/ “`

这篇文章总计约1600字,涵盖了GDB的基础使用到高级技巧,采用Markdown格式,包含代码块、表格等元素,适合作为技术文档阅读。需要扩展任何部分可以随时补充。

推荐阅读:
  1. GDB的使用
  2. 使用ndk-gdb调试AS下的Native程序

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux gdb

上一篇:Linux中有哪些好用的CD/DVD刻录工具

下一篇:Kubuntu21.04中怎么安装KDE Plasma5.2

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》