Dev C++单步调试/debug详细图解

本文通过一个蓝桥杯比赛中的示例,详细讲解了如何使用DevC++的单步调试功能来定位和解决代码中的溢出错误,强调了正确选择数据类型的重要性。

dev下载

拿当前蓝桥杯所使用的5.4.0版本Dev C++举例
蓝桥杯官网下载地址
只能安装一个版本的dev 如果之前安装过需要先卸载原有版本

举例

来一道简单的题输入两个整数A, B 输出A+B的和
数据保证输入的A和B都在int范围内
既然是int就拿int变量存了,附带一段看似正确的代码

#include <stdio.h>

int main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	int c = a + b;
	printf("%d\n", c);
	
	return 0;
}

在这里插入图片描述
输入2和5 输出7看似答案正确了
如果这是一道题你将会收到一个Wrong Answer 为什么呢
在这里插入图片描述
当输入2e9+2e9之后会发现结果输出了一个负数(2e9是在int范围内的整数)
当发现程序出错而不知道错在哪里的时候就需要单步调试来找出错误了

单步调试方法

在这里插入图片描述
想要使用dev编译器进行单步调试写代码的时候就需要创建为项目 而不能是单个的文件
点击文件-新建-项目
在这里插入图片描述
选择ConsoleApplication(终端应用程序也就是黑色的框) 名称自己定一个
在这里插入图片描述
选择一个项目保存的路径 保存就创建完成了
在这里插入图片描述
可以在左边看到项目 点+展开双击main.cpp将代码粘贴进去

在这里插入图片描述
点击代码左侧可以将当前行添加断点
断点的作用就是当调试时代码运行到断点将会停止下来 等待你下一步指令再继续运行
在这里插入图片描述
添加好断点后按F5或者点击调试进入调试模式 每次修改后需要先编译再启动调试否则会调试上次的代码
在这里插入图片描述
进入调试模式后当前运行到的位置将会变成蓝色 左侧会多出一个调试窗口 用来监视变量 下面会多出一些按钮 作用等用到再讲
在这里插入图片描述
在左侧的调试窗口添加两个变量监视 现在就可以看到两个变量当前的值了(46和这个奇怪的数字是因为新的变量未被初始化内存位置的原数值)
在这里插入图片描述
按F7或者点下一步会发现一点反应都没有这是因为当前需要我们输入数字了 当输入完成后会自动向下运行一行
在这里插入图片描述
输入刚才出错的数据两个2e9会发现蓝色的运行到c = a + b的哪一行 并且a和b成功赋值2e9说明接受没有问题
在这里插入图片描述
添加变量c的监视并按下F7再运行一行发现c的值被改为了一个负数 找出错误所在 因为C/C++的int变量范围为-2147483648到2147483647 两个2e9的数值相加超出范围
在这里插入图片描述
当找出错误后按F6或停止执行退出调试 修改代码内变量类型为long long(范围-9e18到9e18) 接受和输出改为%lld再次输入两个2e9发现答案正确

小结

单步调试是最常用的查找代码bug的方法 可以清楚的看到代码内部变量存储情况或者运行到哪个位置发生错误 如果程序没有按照预期执行则发现错误
这里只说了F5开始调试 F6停止调试 F7运行到下一行
还有跳过按钮(运行到下一个断点停止) 跳出函数按钮(当在函数内部时运行到函数结束停止) 这里不再一一说明
切记调试之前需要先按F8进行编译否则会调试上次的代码!!

### DevC++单步调试的功能和意义 #### 单步调试概述 单步调试是指在开发环境中逐步执行程序的过程,每次只执行一条语句或进入一个函数内部。这使得开发者能够在每一处代码被执行之前查看当前状态,并决定是否继续执行下一条指令。 #### 设置断点 为了更精确地控制调试流程,在源码编辑窗口中的某一行左侧空白区域点击鼠标左键可设置断点。当程序运行到该位置时会暂停等待进一步指示[^1]。 #### 使用 F8 进行单步步过 (Step Over) 按下 `F8` 键可以让程序按行顺序向前推进而不会进入到任何子过程内;如果遇到函数调用,则整个函数体将作为一个整体被执行完毕后再返回至上层调用者所在的位置[^4]。 #### 利用 Shift+F7 实现步入(Step Into) Shift+F7 可使调试器跳转至被调用的方法定义处并从那里开始逐条分析其内部逻辑直至完成方法内的所有工作再回到原来的上下文中去。 #### 查看变量值的变化情况 在整个过程中随时可以通过观察局部/全局变量监视面板来跟踪特定对象的状态改变趋势从而判断是否存在预期之外的行为模式。 ```cpp // 示例代码片段用于说明如何利用单步调试特性定位错误原因 void exampleFunction(int param){ int result; // 假设这里有一个潜在缺陷需要排查 if(param > 0){ result = param * 2; }else{ result = param / 0; // 此行为非法操作, 将引发异常 } } ```
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值