【linux】gdb

发布时间 - 2025-06-25 00:00:00    点击率:

在使用gdb进行程序调试时,发布方式主要分为两种:调试模式(debug)和发布模式(release)。在linux系统中,使用gcc/g++编译器生成的二进制程序,默认情况下是发布模式。要进行gdb调试,必须在生成二进制文件时,添加-g选项。

发布版本(Release)不能被调试,而调试版本(Debug)则可以。原因在于,调试版本在编译时会将调试信息嵌入到可执行文件中。

以下是一个示例Makefile,用于生成调试版本的二进制文件:

myprocess-debug: myprocess.c
    gcc -std=c99 -o $@ $^ -g

.PHONY: clean
clean:
    rm -f myprocess-debug

要查看生成的二进制文件中包含的调试信息,可以使用readelf工具:

readelf -S myprocess-debug

readelf是一个用于显示ELF文件信息的工具,-S选项显示ELF文件的节头部信息(section headers)。通过这个命令,可以查看文件中包含的不同节,如代码段、数据段、符号表等。

以下是一个简单的C语言程序示例:

#include 

int AddToTarget(int a, int b) {
    int sum = 0;
    for (int i = a; i <= b; i++) {
        sum += i;
    }
    return sum;
}

int main() {
    int result = AddToTarget(1, 10);
    printf("Sum is %d\n", result);
    return 0;
}

在GDB中调试二进制文件时,可以使用以下命令:

  • gdb binFile:启动GDB并加载二进制文件
  • ctrl + dquit:退出GDB

常用的GDB调试命令包括:

  • list/l 行号:显示源代码,从指定行号开始,每次显示10行
  • list/l 函数名:显示指定函数的源代码
  • r/run:运行程序
  • break(b) 行号:在指定行号设置断点
  • break 函数名:在指定函数开头设置断点
  • info break (i b):查看断点信息
  • delete(d) breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • n/next:单步执行
  • s/step:进入函数调用
  • finish:执行到当前函数返回
  • print(p):打印表达式的值,可以修改变量或调用函数
  • display 变量名:跟踪查看变量,每次停下来都显示其值
  • undisplay(编号):取消对先前设置的变量的跟踪
  • continue(c):从当前位置连续执行程序(运行到下一个断点)
  • until X行号:跳至指定行号
  • breaktrace(bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值
  • quit:退出GDB

这些命令和操作允许开发者在GDB中有效地调试和分析程序。


# linux  # c语言  # 工具  # ai  # print  # break  # continue  # 局部变量  #   # delete  # display  # 行号  # 是一个  # 可以使用  # 源代码  # 两种  # 有效地  # 停下来  # 则可  # 可以查看  # 先前 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  微信小程序 HTTPS报错整理常见问题及解决方案  千库网官网入口推荐 千库网设计创意平台入口  移动端脚本框架Hammer.js  如何在阿里云通过域名搭建网站?  javascript读取文本节点方法小结  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  iOS正则表达式验证手机号、邮箱、身份证号等  如何构建满足综合性能需求的优质建站方案?  如何在香港服务器上快速搭建免备案网站?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  js实现点击每个li节点,都弹出其文本值及修改  如何在Tomcat中配置并部署网站项目?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  如何用JavaScript实现文本编辑器_光标和选区怎么处理  制作企业网站建设方案,怎样建设一个公司网站?  Android 常见的图片加载框架详细介绍  深圳网站制作培训,深圳哪些招聘网站比较好?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何快速搭建高效服务器建站系统?  在线制作视频网站免费,都有哪些好的动漫网站?  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  如何在云主机上快速搭建网站?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何升级到最新版本?(升级指南和步骤)  如何做网站制作流程,*游戏网站怎么搭建?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  零服务器AI建站解决方案:快速部署与云端平台低成本实践  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何创建自定义中间件?(Middleware代码示例)  php结合redis实现高并发下的抢购、秒杀功能的实例  公司网站制作价格怎么算,公司办个官网需要多少钱?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何快速搭建二级域名独立网站?  如何在建站主机中优化服务器配置?  javascript基本数据类型及类型检测常用方法小结  高防服务器租用指南:配置选择与快速部署攻略  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在云主机快速搭建网站站点?  PHP 500报错的快速解决方法  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】