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

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

第一种代码致命错误。

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

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

逻辑错误就需要你去讯寻找哪一步的逻辑错误了?然后更改过来!解决逻辑错的方式你可以自己仔细的去检查你的代码,看是否写的和你想的一样,但是这种方法只针对于代码量小,逻辑层次少的代码。对于代码量很大的代码来说这种方法根本不可能找出你的错误。这个时候就需要到一种方式:调试(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 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

使用匿名类直接new接口 原

初看上去,就好象在“不提供接口实现的情况下,直接new了一个接口实例”,对于C#er来说,有一种尽毁三观的赶脚。

823
来自专栏程序你好

如何用7个简单的步骤,在Firefox开发工具中调试JavaScript

本文将着重于在Firefox的开发工具中调试JavaScript代码。Firefox中的开发工具是一个非常强大的工具,可以加速您的bug查找和修复过程!

886
来自专栏图像识别与深度学习

《HTML5实战》Lesson12

Week13  2016/12/07上午1-4节 一、复习 二、从文件系统中获取文件列表 1、forEach 详解JavaScript中的forEach()...

2755
来自专栏Python爬虫与数据挖掘

如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入。

662
来自专栏大史住在大前端

webpack4.0各个击破(7)—— plugin篇

plugin机制是webpack中另一个核心概念,它基于事件流框架tapable,你可以参考浏览器环境中的【DOM事件模型】,【SPA模型中的生命周期钩子】或是...

822
来自专栏听雨堂

电子签名实现的思路、困难及解决方案

        在办公自动化的流程中希望实现电子签名。         思路:             1、图片的存放:安全起见存放在库中为宜。最好不能被轻易下...

1885
来自专栏守望轩

Visual Studio 2008 每日提示(三十一)

#311、按Shift+F11跳出函数 原文链接:You can press Shift+F11 to step out of a function 操作步...

3577
来自专栏Crossin的编程教室

【Git 第7课】 忽略文件

在文件夹中,经常会有些“其他”文件,比如上节课最后提到的,编辑器产生~结尾的备份文件,或者一些临时文件。又可能,某些文件我们只是在本地使用,并不想提交到远程的仓...

33010
来自专栏Golang语言社区

Gogland更名为GoLand,并附加新功能

IDE改名 Jetbrains在2017年11月02日正式对外公布,Gogland IDE正式改名为GoLand。在社区之前的文章《你们使用的Go IDE要改名...

3709
来自专栏河湾欢儿的专栏

5.规范<1>

规范: 在一个项目中开始的时候,每个人都有自己的习惯与编码规范,在项目进行的过程中有些人会离职,那他的风格会在代码中体验,以后再来新人的时候,还得适应,这样代...

873

扫描关注云+社区