调试器 - gdb/cgdb的使用
一、样例代码1 #includeiostream 2 using namespace std; 3 int func(int start,int end){ 4 int total0; 5 for(int istart;iend;i){ 6 totali; 7 } 8 return total; 9 } 10 int main(){ 11 int start1; 12 int end100; 13 coutI will beginendl; 14 int resfunc(start,end); 15 coutresendl; 16 return 0; 17 }二、预备程序发布方式有两种debug和releaseLinux上gcc/g出来的二进制程序默认是release模式。要使用gdb调试必须在源码生成二进制程序的时候加上-g选项。1 test.exe_debug:*.cpp 2 g -o $ $^ -g 3 .PHONY:clean 4 clean: 5 rm -rf test.exe[xhx_homeiZ2zeiwy4tf4rghoyh5d1yZ cgdb_learning]$ ll total 68 -rw-rw-r-- 1 xhx_home xhx_home 76 Mar 7 16:28 Makefile -rw-rw-r-- 1 xhx_home xhx_home 271 Mar 7 16:25 test.cpp -rwxrwxr-x 1 xhx_home xhx_home 39552 Mar 7 16:28 test.exe_debug -rwxrwxr-x 1 xhx_home xhx_home 18280 Mar 7 16:28 test.exe_release其中很明显可以看出debug模式占据了更大的内存这是因为debug版本相比release版本会有许多配置文件三、常见的使用开始gdb:binFiile退出Ctrld或quit命令作用样例list/l显示源代码从上次位置开始一次显示10行list/l 10list/l列出指定函数的源代码list/l funclist/l列出指定文件的源代码list/l test.c:1r/run从程序开始连续执行runn/next单步执行不进入函数内部逐过程nexts/step单步执行进入函数内部逐语句stepbreak/b [文件名]行号在指定行号设置断点break 10break test.c:10break/b 函数名在函数开头设置断点break maininfo break/b查看当前所有断点的信息info breakprint/p 表达式打印表达式的值p xset ver 变量值修改变量的值set var i10continue/c从当前位置开始连续执行程序continuedelete/d breakpoints删除所有断点delete breakpointsdelete/dbreakpoints n删除序号为n的断点delete breakpoints 1disable breakpoints静用所有的断点disable breakpointsenable breakpoints启用所有断点enable breakpointsinfo/i breakpoints查看当前设置的断点列表info breakpointsdisplay 变量名跟踪显示指定变量的值每次停止时display xundisplay 编号取消对指定编号的变量的跟踪显示undisplay 1until x行号执行到指定行号不在范围内会默认向下执行until 20backtrace/bt查看当前执行栈的各级函数调用及参数backtraceinfo/i locals查看当前栈帧的局部变量值info local四、常见技巧1.watch执行时监视一个表达式的值。如果监视的表达式在程序运行期间的值发生变化GDB会暂停程序的执行并通知使用者。2.set var确定问题的原因假设我们想得到-res1 #includeiostream 2 using namespace std; 3 //int flag-1; 4 int flag0; 5 int func(int start,int end){ 6 int total0; 7 for(int istart;iend;i){ 8 totali; 9 } 10 int re flag*total; 11 return re; 12 } 13 int main(){ 14 int start1; 15 int end100; 16 coutI will beginendl; 17 int resfunc(start,end); 18 coutresendl; 19 return 0; 20 }(gdb) b 10 Breakpoint 1 at 0x4008a1: file test.cpp, line 10. (gdb) r Starting program: /home/xhx_home/cgdb_learning/test.exe_debug Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-164.el8.x86_64 I will begin Breakpoint 1, func (start1, end100) at test.cpp:10 Missing separate debuginfos, use: yum debuginfo-install libgcc-8.5.0-4.el8_5.x86_64 libs tdc-8.5.0-4.el8_5.x86_64 (gdb) display total 1: total 5050 2: re 32767 3: flag 0 (gdb) set var flag-1 (gdb) s 1: total 5050 2: re -5050 3: flag -1 (gdb)3.条件断点1添加条件断点 b [行号] if 条件(gdb) b 8 if i50 Breakpoint 1 at 0x400895: file test.cpp, line 8. (gdb) r Starting program: /home/xhx_home/cgdb_learning/test.exe_debug Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-164.el8.x86_64 I will begin Breakpoint 1, func (start1, end100) at test.cpp:8 Missing separate debuginfos, use: yum debuginfo-install libgcc-8.5.0-4.el8_5.x86_64 libs tdc-8.5.0-4.el8_5.x86_64 (gdb) p i $1 50 (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000000400895 in func(int, int) at test.cpp:8 stop only if i50 breakpoint already hit 1 time2给已经存在的断点新增条件 condition [断点序号] 条件(gdb) b 8 Breakpoint 1 at 0x400895: file test.cpp, line 8. (gdb) condition 1 i30 (gdb) r Starting program: /home/xhx_home/cgdb_learning/test.exe_debug Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-164.el8.x86_64 I will begin Breakpoint 1, func (start1, end100) at test.cpp:8 Missing separate debuginfos, use: yum debuginfo-install libgcc-8.5.0-4.el8_5.x86_64 libs tdc-8.5.0-4.el8_5.x86_64 (gdb) p i $1 30注意条件断点添加常见的两种方式1.新增 2.给已有断点追加注意两者语法区别新增b 行号/文件名行号/函数名 if i30(条件给已有断点追加condition 2 i30 ,其中2为已有断点编号没有ifcgdb分屏操作Esc进入代码屏i回到gbd屏

相关新闻

保姆级网络安全入门教程:一文吃透基础知识(附思维导图)

保姆级网络安全入门教程:一文吃透基础知识(附思维导图)

一、什么是网络安全? 百度上对“网络安全”是这么介绍的: “网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露、系统连续可靠正常地运行,网络服务不中断。” 嗯……

2026/7/7 19:02:03 阅读更多 →
Qwen3-ForcedAligner-0.6B与STM32嵌入式语音设备集成方案

Qwen3-ForcedAligner-0.6B与STM32嵌入式语音设备集成方案

Qwen3-ForcedAligner-0.6B与STM32嵌入式语音设备集成方案 1. 引言 在智能语音设备开发中,语音与文本的时间戳对齐是一个关键但常被忽视的环节。传统方案要么精度不足,要么需要强大的计算资源,很难在嵌入式设备上实现实时处理。现在有了新的…

2026/5/17 9:20:13 阅读更多 →
FRCRN语音降噪工具效果实测:不同噪声类型下语音活动检测(VAD)稳定性验证

FRCRN语音降噪工具效果实测:不同噪声类型下语音活动检测(VAD)稳定性验证

FRCRN语音降噪工具效果实测:不同噪声类型下语音活动检测(VAD)稳定性验证 语音降噪,听起来是个挺专业的事儿,但说白了,就是让咱们在嘈杂环境里说话的声音,听起来更清楚。不管是开线上会议、录播…

2026/7/3 11:25:07 阅读更多 →

最新新闻

TPA3128D2与TM4C129LNCZAD音频系统开发指南

TPA3128D2与TM4C129LNCZAD音频系统开发指南

1. 项目背景与核心组件介绍在嵌入式音频系统开发领域,如何实现高保真音质与高效能放大的完美结合一直是工程师们追求的目标。TPA3128D2与TM4C129LNCZAD这对黄金组合,恰好为解决这一需求提供了理想的硬件平台。TPA3128D2是德州仪器(TI)推出的一款双通道D类…

2026/7/8 12:54:22 阅读更多 →
冷库是什么,为什么高效运行离不开核心部件协同 你的冷库电费为何居高不下?问题可能出在“看不见”的部件上

冷库是什么,为什么高效运行离不开核心部件协同 你的冷库电费为何居高不下?问题可能出在“看不见”的部件上

许多生鲜商户或食品加工厂主发现,新装的冷库明明温度达标,但每月电费却远超预期。有人归咎于压缩机功率大,有人怪天气太热,却很少意识到:冷库的高效运行,从来不是单一设备的功劳,而是冷凝机组、…

2026/7/8 12:54:22 阅读更多 →
Unity 智能多媒体展示引擎 1.0

Unity 智能多媒体展示引擎 1.0

智能多媒体展示引擎是一款专为现代应用程序打造的、企业级的 UI 展示解决方案。它的核心使命是通过高度集成化的功能与智能化的逻辑,在各类应用界面中构建出功能强大、体验卓越、易于维护的动态内容展示中心。 基础功能支持 多媒体格式兼容:原生支持在同…

2026/7/8 12:50:15 阅读更多 →
靠谱的餐饮油水分离器哪家好选

靠谱的餐饮油水分离器哪家好选

在餐饮行业中,油水分离器是必不可少的设备。它不仅能有效分离废水中的油脂,减少对环境的污染,还能避免下水道堵塞,保障餐饮场所的正常运营。然而,市场上的油水分离器品牌众多,质量参差不齐,该如…

2026/7/8 12:50:15 阅读更多 →
门店评价不展示的诊断模型

门店评价不展示的诊断模型

从运营诊断角度看,评价不展示可以拆成两个状态:折叠与删除。一、折叠区判断 常见触发项包括:评价文本少于15字、内容参考意义弱、账号与商家关联性强、账号诚信度较低、文案复制粘贴痕迹明显。折叠并不等于商家违规,它更像内容权重…

2026/7/8 12:44:12 阅读更多 →
推荐太原柔光砖彩砂

推荐太原柔光砖彩砂

近年来,柔光砖凭借其细腻的触感与高级的视觉效果,成为太原不少家庭装修的热门选择。然而,许多业主发现,柔光砖若搭配不当,美缝效果反而会拉低整体颜值。缝隙发黑、彩砂脱落、颜色不匹配等问题频发,让原本理…

2026/7/8 12:44:12 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻