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

【Linux】ghb工具

GDB简介

GDB(GNU Debugger)是Linux系统中最强大的命令行调试工具,由GNU项目开发。作为程序员调试C/C++程序的利器,GDB能帮助你:

  • 定位程序崩溃原因

  • 分析程序运行状态

  • 跟踪变量值变化

  • 检测内存错误

安装与配置

安装方法

# Ubuntu/Debian
sudo apt install gdb# CentOS/RHEL
sudo yum install gdb# Arch Linux
sudo pacman -S gdb

编译选项

要使用GDB调试,编译时需添加-g选项:

gcc -g program.c -o program

基础调试命令

1. 启动调试

gdb ./program       # 启动调试
gdb --args ./program arg1 arg2  # 带参数启动

2. 常用命令速查表

命令功能说明示例
break设置断点break main
run运行程序run arg1 arg2
next单步执行(不进入函数)next
step单步执行(进入函数)step
print打印变量值print variable
backtrace查看调用栈backtrace
continue继续运行到下一个断点continue
quit退出GDBquit

3. 断点管理

break function_name  # 在函数入口设断点
break file.c:20      # 在指定文件的第20行设断点
info breakpoints     # 查看所有断点
delete breakpoint 2  # 删除2号断点

高级调试技巧

1. 观察点(Watchpoint)

watch variable       # 当变量值改变时暂停
rwatch variable      # 当变量被读取时暂停
awatch variable      # 当变量被读/写时暂停

2. 条件断点

break 20 if i==5     # 当i等于5时在第20行暂停

3. 多线程调试

info threads        # 查看所有线程
thread 2            # 切换到2号线程

4. 内存检查

x/10x &array        # 以16进制查看数组前10个元素
x/20s pointer       # 查看指针指向的字符串(20字节)

实战调试示例

1. 段错误调试

# 编译
gcc -g segfault.c -o segfault# 调试
gdb ./segfault
(gdb) run
# 程序崩溃后
(gdb) backtrace
(gdb) frame 2       # 切换到调用栈第2层
(gdb) print *pointer

2. 死锁检测

(gdb) info threads     # 查看线程状态
(gdb) thread apply all backtrace  # 获取所有线程调用栈

常见问题解决

  1. "No symbol table"错误

    • 确保编译时加了-g选项

    • 检查是否strip过可执行文件

  2. 调试优化过的代码

    gcc -O1 -g program.c -o program
    gdb ./program
    (gdb) set print pretty on

  3. 远程调试

    # 目标机器
    gdbserver :1234 ./program# 开发机器
    gdb
    (gdb) target remote target_ip:1234

结语

GDB是Linux开发者不可或缺的调试利器,从简单的程序崩溃分析到复杂的多线程问题定位,GDB都能提供强大的支持。掌握GDB不仅可以提高调试效率,更能帮助你深入理解程序运行机制。建议从基础命令开始练习,逐步掌握高级功能,最终结合各种插件打造个性化的调试环境。


文章转载自:
http://calzone.alwpc.cn
http://chorography.alwpc.cn
http://angostura.alwpc.cn
http://anecdotage.alwpc.cn
http://captain.alwpc.cn
http://anemochory.alwpc.cn
http://alfur.alwpc.cn
http://atmolyze.alwpc.cn
http://calibration.alwpc.cn
http://christy.alwpc.cn
http://amphictyony.alwpc.cn
http://brierroot.alwpc.cn
http://archidiaconate.alwpc.cn
http://banquo.alwpc.cn
http://brier.alwpc.cn
http://abscission.alwpc.cn
http://brag.alwpc.cn
http://canonicate.alwpc.cn
http://alicyclic.alwpc.cn
http://bacterioscopy.alwpc.cn
http://cartilage.alwpc.cn
http://bihar.alwpc.cn
http://boxlike.alwpc.cn
http://berufsverbot.alwpc.cn
http://atman.alwpc.cn
http://brompton.alwpc.cn
http://belt.alwpc.cn
http://ayd.alwpc.cn
http://canvass.alwpc.cn
http://biotypology.alwpc.cn
http://www.dtcms.com/a/261022.html

相关文章:

  • Ubuntu18.04/Mysql 5.7 建立主备模式Mysql集群
  • OpenTiny 体验官实操活动 | 快速体验 TinyVue 组件库的智能化交互能力
  • SQL Server 中 GO 的作用
  • 深入剖析 CVE-2021-3560 与 CVE-2021-4034:原理、区别与联系
  • Zemax光学设计二次成像
  • Web基础关键_003_CSS(一)
  • Dockerfile——AI教你学Docker
  • 创建一个简单入门SpringBoot3项目
  • 桌面小屏幕实战课程:DesktopScreen 13 HTTP SERVER
  • HTTPS hostname wrong: should be <xxx>错误解决
  • Chrome浏览器访问https提示“您的连接不是私密连接”问题解决方案
  • 通信无BUG,ethernet ip转profinet网关,汽车焊接设备通信有心机
  • Windows的xshell连接VW里的centos系统里的mysql失败解决方法
  • algorithm ——————》双指针(移动0 复写0 快乐数 装水问题 以及数组中找几个数和为指定的元组)
  • 智能助手(利用GPT搭建智能系统)
  • 数据库内连接的几种方式及注意事项
  • 【数据结构】B树的介绍及其实现C++
  • C#系统学习第二章——第一个C#程序
  • 小型软件开发的三重境界:从混沌编码到结构化设计
  • C#中 Winform如何实现跨页面调用
  • 智能体Manus和实在Agent的区别
  • MySQL 连接指定端口后,为什么实际仍是 3306?
  • 机器学习基础 多层感知机
  • PART 7 视频
  • 【Elasticsearch】Linux环境下安装Elasticsearch
  • Istio 简介
  • 【CV数据集介绍-40】Cityscapes 数据集:助力自动驾驶的语义分割神器
  • 优雅翻译前端返回中文描述
  • Java8方法引用:简洁高效的编程利器
  • 打造无障碍网页应用的利器:Base UI