分享一篇站长的关于调试的文章: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++调试程序方法详解相关推荐

  1. Linux中history历史命令使用方法详解

    在/etc/profile里添加如下:#History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if ...

  2. python定时任务crontab_【Python】Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. cron 系统调度 ...

  3. linux中apache配置文件在哪,linux网站服务Apache的安装与配置方法详解

    这篇文章介绍下linux网站服务apache的安装与配置方法,包括挂载光盘,安装http服务,管理httpd服务,httpd的配置文件几大部分.具体详情可以参考下文. 1.挂载光盘 自己习惯将光盘挂载 ...

  4. 虚拟机2012搭建DNS服务器,Windows Server2012 安装配置DNS服务器方法详解

    Windows Server2012 安装配置DNS服务器方法详解 在云服务器 Windows Server2012 上安装配置DNS服务器方法,安装与配置非常简单,在这里写个完整教程方便大家查询 一 ...

  5. ecmall php传变量,PHP_ECMall支持SSL连接邮件服务器的配置方法详解,首先,主要是ecmall使用的phpmail - phpStudy...

    ECMall支持SSL连接邮件服务器的配置方法详解 首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接. 然后,得对相应代码做一定调整. 1. 覆盖phpmailer 请从附件进 ...

  6. 3721病毒杀除方法详解

    FROM CHINAUNIX.NET 这篇文章本来是偶的投稿,因故未能发表,近日看到有朋友提到升xp到sp2,必须先删除掉xp的上网助手,因此想起此文,特此发出,欢迎转载,请注明原作者是俺就行咯 == ...

  7. Linux crontab定时任务配置方法(详解)

    id="BAIDU_DUP_fp_iframe" src="https://pos.baidu.com/wh/o.htm?ltr="> 脚本之家 服务器常 ...

  8. pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解

    对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...

  9. linux下crontab allow,【Python】Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍html crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供以后读取和执行.linux ...

  10. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

最新文章

  1. oracle导入sql文件
  2. 布尔运算_实例解析!布尔运算运用技巧!
  3. python 中的三元表达式(三目运算符)
  4. random模块详解
  5. php 替换img宽度,php 如何替换img
  6. 分布式与系统架构的演变
  7. Springboot的工作机制:4 再谈谈自动配置
  8. C++ 调用Asprise OCR识别图片中的文字
  9. 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
  10. 快应用中心运营平台项目心得
  11. js reduce 累加数组里对象某个属性的和 NaN
  12. opensips代码分析
  13. win10下装win7双系统_B360主板装win7+win10双系统失败经历分享
  14. 数据中心硬件架构拆解分析
  15. UESTC -- 1061 秋实大哥与战争(暴力/set)
  16. 微信小程序播放音频,ios静音状态下无声音、音频播放创建多个等问题
  17. 区块链技术与应用行业分析报告
  18. 旅行商问题(深度优先搜索 回溯法 排列树)
  19. MySQL查询优化之七-左Join 和右Join 优化(Left Join and Right Join Optimization)
  20. 推荐一个好用的书摘软件

热门文章

  1. 02-监督学习应用.梯度下降
  2. WPF 引用 ttf文件
  3. win7 virtio 驱动下载
  4. Linq Expression
  5. floodlight路由机制分析
  6. nodejs文件相关模块
  7. SqlServer数据库分离与附加
  8. 前端开发面试题-JavaScript(一)
  9. Mysql基本增删改查
  10. ContentProvider中的数据库的生成时机以及ContentResolver的insert()方法总结