当前位置: 首页 > news >正文

你学会调试程序了吗?(转)

你学会调试程序了吗?

  新人在编写代码的时候难免遇到各式各样的问题,有的复杂有的简单,实际上很多问题并不难解决,有些甚至是你粗心大意导致的后果,有这些问题都没什么,关键是你要学会如何去调试程式,在程式执行过程中遇到问题如何去解决问题,我们来简单说一下常用的调试方式:

  一、断点,就是让我们程式执行一半的时候停止下来,然后我们察看我们定义的变量值是否正确,比如我们人物的坐标,地图的位置等等。在VC下面,你只要简单的按F9就能轻松进行断点操作,在遇到程式未知错误的时候,你甚至可以用这个方法来检测你程式到底当在哪里,然后做进一步的错误分析。使用这个方法需要注意的是,你的程式最好是在DEBUG模式下进行,虽然可以在Release模式下进行断点,但毕竟调试信息少了,可能并不利于调试。

  二、信息输出,就是程式一边执行,一边输出一些信息,当然,这些信息就看你如何设定,用这个方法就可以很及时的了解程序内部的数据变化情况,然后监测程式是否按照我们的预想来执行。输出的方法很多,如:建立一个log文件,然后只要简单的将调试信息输出到文件中即可;或者通过VCIDE环境下的Output窗口来进行,可以用OutputDebugString("...")这支函式来进行输出。

  三、排除法,你实在无法分析哪里出错,你就开始注释,把功能模块一个一个注释掉,看哪个模块出问题,然后再继续深入细化,虽然这个方法土,但却非常有效。


常见错误:
  一、语法错误,这个不用多说,检察代码关键字拼写,看看语法有没有错误的地方。

  二、变量未声明,新人经常会犯这样的错误,一个变量定义的域跟调用它的域不同,从而导致变量非法调用,这个只要留意文件的包含关系应该也是不难解决。

  三、连带效应,有两段代码单独执行没问题,但是放在一起很容易出错,遇到这种情况你就要赶快检察一下全局变量、函式是否有冲突,注意,有时候这些错误并不会体现在编译的过程,而直接体现在执行过程,甚至有时候会有虚假的“执行正常”。

  四、变量值的有效性,很多时候我们会主管认为某些变量的值是理所当然的,但往往有些时候,它们的值并非如我们所愿,建立有效的变量验证机制是非常有用和必要的。

  五、合理的算法,但不合理的结果,一些算法看起来简单,便在脑子里模拟程式执行,实际上可能并非如此,把算法拆开一步一步将结果输出,这样很快就可以找到与你设想不同的地方。

  六、数组越界,我们知道,数组通过下标来对相应的位置进行访问,如果不注意很容易因为下标超出你所定义数组的最大值而产生越界操作,这种错误查找比较困难,也可能会此错误的操作而导致其他地方出错。

  七、指针溢出,这个是非常容易出现的问题,包括高手也经常会出现这样的情况,出现这种错误非常头疼,往往要等到程序执行一段时间后才反应出异常,良好的代码编写习惯这时候就显得重要,这个问题就只能靠时间不断的做检测来进行除错。

  一年以来都没怎么写代码了,今天心血来潮把上次未完成的帖子完成,希望能够对新人有所帮助,也希望大家指正批评。

相关文章:

  • golang结构体的首个地址值等于其本身的地址值
  • golang文件拷贝
  • C++的学习感想(转载)
  • golang读取目录里面文件
  • API函数大全(转载)
  • golang文件目录读取和文件的写入
  • 访客在此留言
  • threejs入门
  • 关于某人要求我删除文章的回应
  • uniapp下载文件保存自定义目录
  • Dev-Cpp/Mingw32 环境介绍(2)
  • uni-app 中使用定时器和取消定时器
  • 哈夫曼编码原码
  • module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘ 错误
  • Python图像-灰度处理
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 77. Combinations
  • Asm.js的简单介绍
  • ES2017异步函数现已正式可用
  • Js基础——数据类型之Null和Undefined
  • js作用域和this的理解
  • markdown编辑器简评
  • Node 版本管理
  • npx命令介绍
  • Spring Boot快速入门(一):Hello Spring Boot
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue-cli3搭建项目
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 利用DataURL技术在网页上显示图片
  • 浏览器缓存机制分析
  • 如何使用 JavaScript 解析 URL
  • nb
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 如何用纯 CSS 创作一个货车 loader
  • $.ajax()参数及用法
  • $jQuery 重写Alert样式方法
  • (C语言)球球大作战
  • (MATLAB)第五章-矩阵运算
  • (二)Eureka服务搭建,服务注册,服务发现
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)visual stdio 书签功能介绍
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET Framework 4.6.2改进了WPF和安全性
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • :中兴通讯为何成功
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [Bugku]密码???[writeup]
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [c#基础]DataTable的Select方法
  • [CQOI 2011]动态逆序对