Dev C++调试程序方法详解
分享一篇站长的关于调试的文章:Dev C++调试程序方法详解
Dev C++算是兼容性很好使用很方便的IDE了,记录一下调试方法,以备不时之需。
所谓调试程序,就是控制编译器一行一行地执行代码,过程中可以清楚看到每个变量值的变化情况、函数的调用过程等,进而发现程序中隐藏的错误或者低效的代码。
作为一款免费、开源的 C/C++ IDE,Dev C++ 内嵌 GCC 编译器和 GDB 调试器,既能编译、运行程序,也能调试程序。本节,我们以一段完整的 C 语言程序为例,系统地学一下如何用 Dev C++ 调试程序。
#include <stdio.h>
int add(int a,int b){int c = a+b;return c;
}
int main(){int a=10,b=20;int sum = add(a,b);printf("sum = %d",sum);return 0;
}
Dev C++调试程序
默认情况下,程序会瞬间从开头执行到结尾,除非中途出现错误(称为“运行时错误”,比如读写内存失败、数组越界等)。要想让程序暂停执行,就需要设置一个断点。
所谓断点(BreakPoint),可以简单地理解成障碍物,汽车遇到障碍物不能通行,程序遇到断点就会暂停执行。Dev C++ 给程序设置断点的方法很简单,想在哪一行代码处暂停执行,直接单击代码所在行的行号即可。例如:
图 1 Dev C++添加断点
如上图所示,我们成功地在第 7 行代码处添加了一个断点。注意,以正常方式点击“编译运行”按钮(快捷键是 “Fn+F11”)运行程序,断点是不会生效的,只有点击“调试”按钮(快捷键是 Fn+F5)运行程序时才有效。
图 2 调试程序
注意,只有在“Debug”模式下才能使用调试功能,如图 2 所示,本节选用的是“TDM-GCC 4.9.2 64-bit Debug”模式。
点击“调试”按钮,或者按下快捷键“Fn+F5”,程序开始执行,直到第 7 行代码处(当前行代码尚未运行)暂停,如下所示:
图 3 断点发挥作用
当程序暂时执行时,借助调试窗口中的按钮可以查看某些变量的值,还可以控制编译器继续往下执行程序。整个调试窗口中,常用的按钮以及含义分别是:
- 添加查看:查看某个变量的值,还可以看到值的变化情况;
- 下一步:控制编译器向下执行一行语句;
- 单步进入:功能和“下一步”按钮类似,不同之处在于,当程序中调用某个自定义的函数时,此按钮可以进入到函数内部,继续调试函数内部的代码,而 “下一步” 按钮不会;
- 跳过:继续执行程序,遇到下一个断点暂停执行;
- 停止执行:停止调试程序。
举个例子,点击“添加查看”按钮监视变量 sum 值的变化情况,添加之后如下图所示:
图 4 添加要监控的变量
初始状态下,变量 sum 的值为 0。点击“下一步”,执行第 7 行代码,箭头光标指向第 8 行,变量 sum 的值仍为 0。再点击“下一步”,执行第 8 行代码,箭头光标指向第 9 行,变量 sum 的值变为 30。
当箭头光标指向第 8 行代码时,点击“单步进入”按钮,箭头光标会进入 add() 函数并指向第 3 行代码,感兴趣的读者可自行尝试。
调试过程中,Dev C++ 支持同时监控多个变量,还支持在程序中设置多个断点,如下图所示:
图 5 多个断点和监控多个变量
Dev C++调试注意事项
对于修改后的程序,调试程序之前一定要先编译程序。
目前,多数人使用的都是 Windows 10 操作系统,但遗憾地是,即便是最新版本的 Dev C++(目前的最新版本是 5.11),在 Windows 10 上的兼容性并不好,有时会出现各种奇葩的问题。
举个例子,某些版本的 Dev C++ 调试 C++ 程序时,遇到 endl 会出现“卡死”的情况,无法继续调试程序。遇到这种情况,比如容易的解决方案是:将 endl 用 ‘\n’ 替换,就可以解决这个问题。
Dev C++调试程序方法详解相关推荐
- Linux中history历史命令使用方法详解
在/etc/profile里添加如下:#History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if ...
- python定时任务crontab_【Python】Linux crontab定时任务配置方法(详解)
CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. cron 系统调度 ...
- linux中apache配置文件在哪,linux网站服务Apache的安装与配置方法详解
这篇文章介绍下linux网站服务apache的安装与配置方法,包括挂载光盘,安装http服务,管理httpd服务,httpd的配置文件几大部分.具体详情可以参考下文. 1.挂载光盘 自己习惯将光盘挂载 ...
- 虚拟机2012搭建DNS服务器,Windows Server2012 安装配置DNS服务器方法详解
Windows Server2012 安装配置DNS服务器方法详解 在云服务器 Windows Server2012 上安装配置DNS服务器方法,安装与配置非常简单,在这里写个完整教程方便大家查询 一 ...
- ecmall php传变量,PHP_ECMall支持SSL连接邮件服务器的配置方法详解,首先,主要是ecmall使用的phpmail - phpStudy...
ECMall支持SSL连接邮件服务器的配置方法详解 首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接. 然后,得对相应代码做一定调整. 1. 覆盖phpmailer 请从附件进 ...
- 3721病毒杀除方法详解
FROM CHINAUNIX.NET 这篇文章本来是偶的投稿,因故未能发表,近日看到有朋友提到升xp到sp2,必须先删除掉xp的上网助手,因此想起此文,特此发出,欢迎转载,请注明原作者是俺就行咯 == ...
- Linux crontab定时任务配置方法(详解)
id="BAIDU_DUP_fp_iframe" src="https://pos.baidu.com/wh/o.htm?ltr="> 脚本之家 服务器常 ...
- pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解
对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...
- linux下crontab allow,【Python】Linux crontab定时任务配置方法(详解)
CRONTAB概念/介绍html crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供以后读取和执行.linux ...
- python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解
如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...
最新文章
- oracle导入sql文件
- 布尔运算_实例解析!布尔运算运用技巧!
- python 中的三元表达式(三目运算符)
- random模块详解
- php 替换img宽度,php 如何替换img
- 分布式与系统架构的演变
- Springboot的工作机制:4 再谈谈自动配置
- C++ 调用Asprise OCR识别图片中的文字
- 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
- 快应用中心运营平台项目心得
- js reduce 累加数组里对象某个属性的和 NaN
- opensips代码分析
- win10下装win7双系统_B360主板装win7+win10双系统失败经历分享
- 数据中心硬件架构拆解分析
- UESTC -- 1061 秋实大哥与战争(暴力/set)
- 微信小程序播放音频,ios静音状态下无声音、音频播放创建多个等问题
- 区块链技术与应用行业分析报告
- 旅行商问题(深度优先搜索 回溯法 排列树)
- MySQL查询优化之七-左Join 和右Join 优化(Left Join and Right Join Optimization)
- 推荐一个好用的书摘软件