【入门必备】编程必备技能--抓出代码中的蛀虫

很多的朋友,在写代码的时候经常运行出错然而却找不到哪里错了。那就是你没有学会分析错误,你到底错在哪里了?为什么错了?

第一种代码致命错误。

一般的错误代码在编译器的编译的的时候就会在下方或某个输出框里输出你那里存在错误,这个时候你就要根据提示去找到错误的源点,去分析你那里错了?为什么错了?(经常总结是一个好习惯)。一般代码上的错误都能够通过编译器的提示,在对应的地方找到错误然后修改。还有一种错误叫做逻辑错误。这种错误编器是不能直接帮助你找出来的。也就是编译通过,但是你在执行的时候就会发生中断。这个时候没有编译器直接给你指错误的源点,你怎么去寻找错误呢?第一你就要想到你的代码没有致命错误。

第二你肯定是犯了逻辑错误。

逻辑错误就需要你去讯寻找哪一步的逻辑错误了?然后更改过来!解决逻辑错的方式你可以自己仔细的去检查你的代码,看是否写的和你想的一样,但是这种方法只针对于代码量小,逻辑层次少的代码。对于代码量很大的代码来说这种方法根本不可能找出你的错误。这个时候就需要到一种方式:调试(DEBUG).调试和我们的运行类似,只是他会把你想看到的那部分代码在运行过程中显示出来,这时候系统会把运行权利交还到你的手中,由你自己来操作代码的运行,这个时候你就可以一步一步的跟着代码走,同时你要对应你自己的想法,看看每一步代码是不是像你想象那样运行到对应的代码上去的。简单逻辑错误,当你在调试的过程中,遇到哪里就会中断,这个时候你也就知道到底是那一句代码哪里出错了。但是对于复杂一点的代码你就需要不停地运行,看看是不是卡死在那个循环或者那个地方了,这样就能很快捷的找到你错误的地点,以便于你去及时的改正!

下面演示一下简单逻辑错误调试(例子编译器为VS2010不同的编译器可能控件不一样,但是运行步骤都是一样

的):

第一种错误简单逻辑错误(少了某些东西,但是编译能够通过,运行失败:

#include<stdio.h>

int main()

{

int iNumber;

scanf("%d",iNumber);

printf("%d",iNumber);

return 0;

}

编译通过,但是在运行时出错:

第一步:我们在程序入口后的第一句执行代码出设置断点(断点:即系统交还控制权的第一句代码位置处):

当断点设置成功后在哪一句代码的前方会出现一个小红点(不同的编译器可能显示的图案不一样,但是都会有一个标识的)。同一段代码可以设置多个断点。

第二步:开始执行断点后的代码(对于我的编译器是(F10下一步(逐过程),F11下一步(逐句))他们的区别是,逐句就是每一句代码都是一步一步的走,当你运行到函数时,他会进入到函数体内接着运行显示内部代码。而逐过程就是当运行到函数是不会进入到函数体内显示运行过程代码。一般用F10当遇到函数时用F11:

打开调试:

在这个小红点内有一个黄色的箭头,这个箭头指向的就是下一句将要执行的代码。

反复按F10直到系统报错:

这个时候系统报错了,箭头指向的那一句代码就是有问题的代码。我们回到源代码去看看那一句代码我们忽略了什么。

原来是我们在读取的时候少了一个‘&‘符。触犯了我在论代码规范的重要性里面的代码书写规范了。修改过来再运行:

这样我们就完成了一次DEBUG,采用此方法可以解决很多你意想不到的错误。

希望对你有所帮助。——稻草人


原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

40+个对初学者非常有用的PHP技巧(一)

今天我们要介绍一些关于改善和优化PHP代码的提示和技巧。请注意,这些PHP技巧适用于初学者,而不是那些已经在使用MVC框架的人。

923
来自专栏代码世界

Python之IO模型

IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞     同步(synchronous) IO和异步(asynchronous...

44011
来自专栏前端正义联盟

gitflow 开发流程学习(第二部分)

1686
来自专栏java一日一条

40+个对初学者非常有用的PHP技巧(一)

今天我们要介绍一些关于改善和优化PHP代码的提示和技巧。请注意,这些PHP技巧适用于初学者,而不是那些已经在使用MVC框架的人。

1222
来自专栏烙馅饼喽的技术分享

用ECMAScript4 ( ActionScript3) 实现Unity的热更新

unity热更新是一个经久不衰的话题。除了最常见的lua之外,还有如JSBinding,C#等等。这里介绍一个使用ECMAScript4进行热更新的方案。它吸收...

2764
来自专栏java工会

DOC文档注释,让你的代码如此清晰。

2324
来自专栏Java成神之路

Java微信开发_Exception_03_errcode:48001 errmsg:api unauthorized hint

异常信息:errcode:48001 errmsg:api unauthorized hint

1374
来自专栏Java后端技术栈

基于TCP和HTTP协议的RPC简单实现

(1)RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网...

1173
来自专栏实用工具入门教程

如何部署 Redis 集群

Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使...

7.3K6
来自专栏1001482的专栏

大数据实时处理利器 storm 的 ui 解剖

众所周知,storm已经是业界主流的流时处理框架,Storm被广泛应用于实时分析,在线机器学习,持续计算、分布式远程调用等领域。

1.7K1

扫码关注云+社区

领取腾讯云代金券