【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语言程序示例:
#includeint 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 + d或quit:退出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多对多关系及中间表数据存取【方法】

