当前位置: 首页 > java >正文

gdb调试

GDB(GNU调试器)是Linux下非常强大、常用的调试工具。它可以帮你跟踪程序运行状态、查找bug、分析程序崩溃原因等。

一、什么是GDB?它能做什么?

**GDB(GNU Debugger)**是一个调试工具,类似于程序的“监控器”和“助手”。它可以让你:

  • 暂停程序在某个位置(设置断点)
  • 逐句运行程序(单步执行)
  • 查看变量的值
  • 改变变量的值
  • 跟踪程序的调用栈(函数调用顺序)
  • 发现程序崩溃的原因(核心转储分析)

简单说,GDB帮你观察和操控程序的执行流程,找出问题所在。


二、使用准备:确保程序可以调试

1. 编译带调试信息

如果要用GDB调试,你的程序必须“加上调试符号”。这是在编译时加入的特殊信息,让GDB知道代码和源文件对应关系。

比如,用gcc编译:

gcc -g program.c -o program

-g意味着加入调试信息。

你不用加优化(-O)参数,否则调试起来会比较难。


三、基本的GDB流程(入门指南)

1. 启动GDB

在终端输入:

gdb ./program

这样就开启了调试环境。

2. 设置断点(暂停点)

断点是让程序在某行停下来,方便检查。

设置断点 比如在main函数第一行:

(gdb) break main

或者在具体文件的某一行:

(gdb) break 15

意思是在第15行停。

3. 运行程序

(gdb) run

程序会从起点开始运行,到遇到第一个断点暂停。

你可以给程序传参数:

(gdb) run arg1 arg2

4. 程序暂停后(断点处)

可以用多种命令看变量、单步执行等。


四、常用操作详细介绍

操作命令作用说明
启动调试环境gdb ./program打开调试工具,载入程序
设置断点break function在函数开头设置断点(比如break main
break filename:line在特定源文件的某一行设置断点
运行程序run开始运行程序,遇到断点停止
继续运行continue程序暂停后,继续运行至下一个断点或结束
单步执行(逐句执行)step进入函数内部执行下一行(如果有函数,逐步进去)
next单步执行,但不进入函数内部
查看变量print variable_name查看变量的值(比如print x
观察所有变量info locals列出当前函数的所有局部变量
查看调用栈(函数调用历史)backtrace 或 bt查看当前函数的调用链,帮助找出崩溃点
改变变量的值set variable_name=值改变变量的值,测试不同场景
删除断点delete breakpoint_number删除断点(比如delete 1删除第1个断点)
查看所有断点info breakpoints查看已设置的断点信息
退出调试quit退出GDB,结束调试

五、调试实例(示范:调试一个简单程序)

假设你有这样一个程序test.c

#include <stdio.h>int main() {int a=5, b=0;printf("a=%d, b=%d\n", a, b);int c = a / b;  // 这里会崩溃:除以零printf("结果:%d\n", c);return 0;
}

编译:

gcc -g test.c -o test

调试:

gdb ./test

调试流程:

(gdb) break main        # 在main函数起点断开
(gdb) run               # 运行到断点
(gdb) print a           # 查看变量a的值
(gdb) print b           # 查看b
(gdb) step              # 进入下一行(算表达式)
(gdb) next              # 执行下一行,不进入函数
(gdb) continue          # 继续运行直到崩溃或遇到下个断点

程序会崩溃(除零错误),GDB会停止在出问题的地方,你可以用bt查看调用栈。


六、实用技巧和注意事项

  • 用quit退出:输入quit或者q退出GDB
  • 查看源代码:在调试时一定要确保源文件在调试目录
  • 多线程调试:GDB支持多线程,但需要了解线程的命令
  • 断点条件:比如:只在某变量满足条件时停
(gdb) break filename:line if x==10
  • 支持远程调试:可以调试嵌入式设备(需要特殊配置)

七、总结

重点内容
为什么用GDB查bug、理解程序流程、动态修改变量
如何启动gdb ./程序
常用命令breakrunprintstepnextcontinuebt
需要准备-g参数编译,源代码清楚
调试技巧设置条件断点、查看调用栈、修改变量值
http://www.xdnf.cn/news/5921.html

相关文章:

  • 山东大学软件学院计算机图形学2025期末考题回忆版
  • 使用class手搓Promise,三步一回头
  • 传输层协议UDP
  • latex公式格式
  • Spark自定义分区器-基础
  • 力扣-1.两数之和
  • java的switch case
  • Flutter小白入门指南
  • Spark Streaming 内部运行机制详解
  • MySQL 深度分页怎么优化?
  • 基于 Spring Boot 瑞吉外卖系统开发(十三)
  • SpringBoot中的拦截器
  • 精简大语言模型:用于定制语言模型的自适应知识蒸馏
  • RobotxR1:通过闭环强化学习在大语言模型上实现具身机器人智能
  • 【Web应用】Vue 项目前端项目文件夹和文件介绍
  • 17.责任链模式:思考与解读
  • Mysql索引优化
  • State(状态)——对象行为型模式
  • 在scala中sparkSQL读入csv文件
  • 【AI提示词】贝叶斯分析专家
  • C语言编程--二叉树--构建解析树
  • iOS - 如何从appStore获取app版本信息
  • 各类芒果(果实、叶片、产量等)相关数据集
  • Python爬虫实战:研究JavaScript 环境补全逆向解密
  • SQLMesh信号机制详解:如何精准控制模型评估时机
  • CSS可以继承的样式汇总
  • 【言语】刷题3
  • 串口模块详细讲解
  • IO、存储、硬盘、文件系统相关常识
  • 【Bluedroid】蓝牙 HID DEVICE 初始化流程源码解析