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

Linux中的GDB的作用与GCC的区别

GDB(GNU Debugger)是一个开源的调试工具,专门用来调试用C、C++等编程语言写成的程序。它能帮助开发者在程序运行时观察程序内部的状态,从而快速定位和修复bug。

主要功能

  • 1.启动程序
    你可以用GDB启动可执行程序,它会在程序入口处暂停,让你开始调试。

  • 2.设置断点(breakpoints)
    你可以在程序的某一行或某个函数上设置断点,让程序在那个位置暂停。

  • 3.单步执行(step/bstep)
    逐行执行代码(step),或者逐过程跳转(next),观察程序的执行流程。

  • 4.观察变量(print 或 display)
    可以打印出变量的值,观察其变化情况,帮助分析错误。

  • 5.修改变量
    在调试过程中,可以修改变量的值,测试不同的场景。

  • 6.调用栈(backtrace)
    当程序崩溃时,可以显示调用堆栈,找到出错的函数调用路径。

  • 7.追踪内存和寄存器
    可以检查内存内容和寄存器状态。

  • 8.多线程调试
    支持多线程程序的调试,跟踪每个线程的状态。

工作流程

1.编译时添加调试信息
使用-g参数编译程序,让GDB能识别源码与二进制的对应关系。例如:

gcc -g myprogram.c -o myprogram

解释:

  • gcc:调用GCC编译器,用来编译源代码。

  • -g:告诉编译器在生成的可执行文件中包含调试信息(调试符号)。
    这意味着,生成的程序会保存源码中的变量名、行号等信息,方便调试工具(如GDB)分析程序。

  • myprogram.c:源代码文件名,包含你要编译的C语言代码。

  • -o myprogram:指定输出文件的名字为myprogram,这个是编译生成的可执行文件的文件名。

  • 如果没有-o选项,默认输出文件名通常是a.out。

2.启动GDB
在终端输入:

gdb ./myprogram

进入GDB命令界面。

3.运行程序
在GDB中输入:

run

这会开始执行程序,直到遇到第一个断点或程序结束。

4.设置断点
例如,在main函数第一行:

break main

或者在某一行:

break 25

5.单步调试

  • 执行下一行:next
  • 进入函数:step
  • 继续运行直到断点:continue

6.检查变量

print variable_name

7.观察变量变化(实时显示)

display variable_name

8.程序崩溃后分析
在程序崩溃时,可以使用:

backtrace

9.退出GDB

quit

GDB常用命令汇总

命令作用
breakb设置断点(如:break mainb 25
run开始执行程序
next执行下一行(不进入函数内部)
step执行下一行,若是函数,则进入函数内部
continue继续执行,直到遇到下一个断点或程序结束
printp打印变量值(如:print x
display自动在每次暂停时显示变量
backtrace打印调用堆栈,帮助定位出错位置
quit退出GDB

与GCC的区别

GCC

作用

  • GCC 是一套用来将源代码(比如C、C++、Fortran、Go等)编译成机器代码(可执行文件)的工具。
  • 它负责“翻译”程序源码,让计算机能够理解和执行。

主要职责

  • 语法分析、优化代码
  • 生成目标代码(目标文件)
  • 最终链接成可以运行的程序

小结

  • 作用:编译源代码
  • 输入:源码文件(.c、.cpp)
  • 输出:可执行文件或目标文件 (*.exe, *.o)
  • 作用阶段:前端到后端的编译过程

GDB

作用

  • GDB 是一款调试工具,用来在程序运行时“观察”和“控制”程序状态。
  • 它帮助开发者查找程序中的错误(bug),理解程序流程,修改变量值等。

主要职责

  • 运行程序,设置断点
  • 单步调试
  • 查看变量,堆栈信息
  • 分析程序崩溃原因

小结

  • 作用:调试和分析程序
  • 输入:已编译的可执行文件(考虑调试信息)
  • 输出:调试信息、断点控制、变量值等
  • 作用阶段:调试阶段,程序执行时

区别总结

特点GCCGDB
作用编译源代码,将源码转为可执行程序调试已生成的可执行程序
功能语法分析、优化、生成目标文件和可执行文件观察、控制程序执行、查找错误
使用场景开发阶段写代码、编译程序调试运行中的程序,修复 bug
输入源代码文件(如 .c、.cpp)可执行文件(带调试信息的程序)
输出可执行程序或目标文件调试信息、变量值、调用堆栈等
  • GCC就像是“翻译员”,负责把你写的高层次源码翻译成计算机能理解的机器码。
  • GDB则像是“侦探”或“助手”,在程序运行时帮助你观察和控制程序的行为,找出隐藏的问题。
http://www.dtcms.com/a/282964.html

相关文章:

  • 设计一款用于捕捉动态产品视频的摄像机器人
  • 《透视定轴:CSS 3D魔方中视觉层级的秩序法则》
  • Linux下操作SQL SERVER
  • sqli-labs通关笔记-第03关 GET字符型注入(单引号括号闭合 手工注入+脚本注入两种方法)
  • github上传大文件
  • 2025 Python3 网络编程 Socket编程详解
  • 基于SD-WAN的智慧高速解决方案:高效、低成本的智能交通实践
  • AWS权限异常实时告警系统完整实现指南
  • 网络安全初级(XSS-labs 1-8)
  • WebView 性能调试与优化 解决资源加载与请求顺序问题
  • 5.更新-demo
  • Matlab数字图像处理——基于图像分割与模板匹配的的车牌识别系统
  • 7.17 滑动窗口
  • TCP粘包和拆包问题详解:原理与Netty解决方案
  • 命令解释器-shell
  • rtthread - V5.1.0版本 HOOK 钩子函数总结
  • VUEX 基础语法
  • BBDM: Image-to-image Translation with Brownian Bridge Diffusion Models 译读笔记
  • 汽车电子功能安全标准ISO26262解析(二)——需求部分
  • 使用JS编写一个购物车界面
  • 51c大模型~合集155
  • 求不重叠区间总和最大值
  • 【Linux】基本指令学习1
  • 【从树的视角理解递归】【递归 = 遍历 || 分解】
  • 薄板样条(TPS, Thin Plate Spline)数学原理推导
  • 从0到1开发网页版五子棋:我的Java实战之旅
  • 【ROS/DDS】FastDDS:C++编写一个发布者和订阅者应用程序(三)
  • OpenCV稠密光流估计的一个类cv::optflow::DenseRLOFOpticalFlow
  • hashMap原理(一)
  • FAISS深度学习指南:构建高效向量检索系统的完整方法论