前言

想必不少人在刷ACM题目或者平时写一些小程序时,多多少少都会遇到一些Bug

咦?为什么我的程序RE了……我思路绝对没问题,可这不是我想要的输出结果……等等

其中Bug是缺陷(defect)的一种表现形式,而一个缺陷是可以引起多种Bug的,通常debug是指发现缺陷并改正的过程,如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(root cause),这个过程就称作调试(debugging)

然后很多人就只好在各种地方printf(),或者assert()等等,来看看这个地方的数据有没有错或者程序能否执行到某个地方,有的时候还好,就一行,但当你想看某个循环里面的变量,或者看一个二维数组中变量时候,就会很不方便/麻烦

而Visual Studio提供了非常齐全使用的调试工具,虽然很多功能相对复杂,但其实想解决一般ACM题目中的问题,还是非常非常简单的,更可以在平时给你节省很多的时间,特别是在网赛冲个前几名时间很宝贵的

以下就拿题目bzoj 3477的AC代码举例,这是一道只需要用到二分的简单题目,当然也调用了函数

一、设置断点

断点用于通知调试器在什么地方暂停程序执行,点击当前行最左侧就可以当前行添加断点

如下图,while循环那一行左侧有个断点,那么F5之后,程序在执行到while循环之前就会停止执行

而此时最下方就会显示目前所有变量的值,把鼠标移到某个变量上也可以

例如图中鼠标移动到a数组上,点击'+'号,就可以列出这个数组中每个下标对应的值,从而不需要printf()操作了

这个时候只要再按一次F5,就会从断点处开始继续执行,直到遇到下一个断点

而断点设在While循环这一行也就意味着:你每按一次F5,程序都会刚好多进行一次while循环!

下面就是若干次循环之后的结果,r的值为625.9375

二、逐过程与逐语句

就是一条一条的执行代码,程序在断点停下后,每按一次逐过程,程序就会多执行一个语句

也就是图中的31→33→34→35→36→37→31(一趟循环结束回到31)

是的没错,逐过程遇到执行函数(方法调用)时,并不会跳进函数里,而是一口气将函数执行完

而逐语句和逐过程一样,唯一的区别就是逐语句会跳入函数中

对于下图逐语句执行到16行时,会直接跳入库函数里

当你在一个函数(方法)内部调试时跳出,调试器会完成此方法的执行,并在调用此方法的语句的下一条语句处暂停。

三、设置下一语句

顾名思义,你可以任选一行设置下一语句,这样你的程序下一步就会直接从那一行开始执行,相当于改变了程序原先的逻辑

如下图,假设你现在你已经执行到while循环里面了,如果你在第27行"右键→设置下一语句",那么程序下一句就会从第27行开始执行,这也意味着你又要输入一次数据

这是一个很有意思的特性,在某些时候可以帮你跳过一下break或者return

四、条件断点

程序中的while循环可能会循环个几万次甚至千万次,如果我想看最后几次循环时的数据怎么办呢?

如果不停的F5,说不准能按上一个月……

那当然是有方法的,右键断点并选择条件,在条件里面输入一个表达式

对于下面的两张图,当且仅当l+0.01≥r(二分快结束)时,这个断点才会生效

五、即时窗口

即时窗口是个很强大的功能,它可以在不改变当前调试步骤的情况下修改变量值或者执行一些语句

例如下面的程序刚执行到第33行(第一次进入循环,m还是垃圾值)

但是我可以在右下角的即时窗口给m赋值为666,并且修改r=100000

因为是入门,就暂时讲到这了,还有很多很强的功能比如调用堆栈等以后有机会再看吧

如何使用VS2012进行简单程序的DEBUG(入门级)相关推荐

  1. 06 使用VS2012开发简单控制器程序 1214

    06 使用VS2012开发简单控制器程序 1214 01 02

  2. Python程序员Debug利器,和Print说再见 | 技术头条

    整理 | Rachel 责编 | Jane 出品 | Python大本营(id:pythonnews) [导语]程序员每日都在和 debug 相伴.新手程序员需要学习的 debug 手段复杂多样,设置 ...

  3. 嵌入式作业使用MDK编译stm32简单程序

    目录 一.MDK和stm32介绍 1.什么是stm32 2.什么是MDK 二.环境配置 1.准备工作 2.安装keil软件 3.keil的环境设置 三.stm32程序编译 1.新建工程 2.新建mai ...

  4. 使用Eclipse开发Spring的第一个简单程序

    使用Eclipse开发Spring的第一个简单程序 本篇文章将通过一个简单的入门程序向读者演示Spring框架的使用过程,具体如下: 使用Eclipse创建Web应用并导入JAR包 使用Eclipse ...

  5. C语言简单程序的编写和调试,上机1--C语言简单程序的编写和调试.doc

    上机1--C语言简单程序的编写和调试.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印 ...

  6. 一个stm32简单程序的编译

    MDK 是 Microcontroller Development Kit 的缩写,ARM 公司出品,是目前针对 ARM 处理器,尤其是 Cortex-M 内核处理器的最佳开发工具. 目录 一.MDK ...

  7. ARM开发环境入门:keil与proteus的简单程序的熟悉

    这里写目录标题 安装mdk5,stm32与proreus 参考网上代码,完成一个STM32简单程序的编译 完成一个51程序设计和仿真 安装mdk5,stm32与proreus 安装包链接:keil h ...

  8. 1.1GTK+ 的简单程序HelloWorld

    1.1GTK+ 的简单程序HelloWorld 编译执行如图所看到的:

  9. python编写程序-30分钟学会用Python编写简单程序

    参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方式修改它们. 了解构成有效Python标识符和表 ...

最新文章

  1. rest服务器性能,基于真实应用环境下的 WEB REST API 性能测试
  2. Sci-Hub重生了,这回用上了分布式网络
  3. MySQL编程技巧_MySQL编程中的6个重要的实用技巧
  4. 【双100%提交】剑指 Offer 09. 用两个栈实现队列
  5. Asp.Net Core 发布和部署(Linux + Jexus )
  6. IntelliJ IDEA汉化版jar包
  7. centos7.3安装mysql5.7 解决 Access denied for user 'root'@'localhost' (using password: NO)
  8. 【笔记】多态之Override
  9. python配置环境是干啥的_Python配置环境
  10. 思步网6月底再次重磅出击:《CrystalBall User Manual 7.3(水晶球操作手册7.3)中英文对照版》
  11. 对角化求可逆矩阵_矩阵对角化方法
  12. 怎样进入国外的游戏行业工作?
  13. 树莓派的产品定位,以及探讨与ARM开发板的区别
  14. xp计算机图标,xp我的计算机图标不见了
  15. 电脑版微信多开的方法
  16. txt、csv、trc、log格式转换成asc
  17. 使用unity实现桌面宠物
  18. Python基础学习第八天
  19. 如何使用Windows自带的“diskpart”工具制作系统启动盘
  20. springboot基于微信小程序的校园外卖系统毕业设计源码091024

热门文章

  1. python能做什么-揭秘python都能做什么?
  2. python编程语言-Python有望超越Java排第二?风变编程解析编程语言新趋势
  3. python3入门代码-python3爬虫入门程序
  4. 普通人学python有啥用-学习Python到底有什么用?
  5. Android基于讯飞语音SDK实现语音识别
  6. html鼠标感应图片,jQuery实现的感应鼠标悬停图片色彩渐显效果
  7. mouseover和mouseenter的区别
  8. 【设计模式笔记】代理模式
  9. jni开发-GetMethodID与CallObjectMethod的坑
  10. live555学习笔记-RTSP服务运作