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

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

第一种代码致命错误。

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

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

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

相关文章

来自专栏Golang语言社区

如何优化服务器的性能

一、通常服务器的性能会卡在三个地方: cpu 网络IO 磁盘IO 二、在优化性能的时候,首先要判断性能的瓶颈在上述的哪个地方。然后对症下药,按照下面的方法来优化...

4716
来自专栏前端杂货铺

node模块加载层级优化

模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载。但是随着应用...

3548
来自专栏Golang语言社区

如何优化服务器的性能

一、通常服务器的性能会卡在三个地方: cpu 网络IO 磁盘IO 二、在优化性能的时候,首先要判断性能的瓶颈在上述的哪个地方。然后对症下药,按照下面的方法来优化...

3859
来自专栏编程

2018 年了,你还是只会 npm install 吗?

你真的了解 npm 吗 ?重新介绍 npm 。

3.4K16
来自专栏Python

IO模型

一 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:   所谓同...

1875
来自专栏Java成神之路

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

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

1054
来自专栏代码世界

Python之IO模型

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

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

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

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

2564
来自专栏前端正义联盟

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

1456
来自专栏信安之路

记一次审计 xiaocms 的过程

周末在家刚吃完晚饭,基友 DM 叫我一起来审计 xiaocms 系统,也不知道他是受到啥刺激了。正好,除了 Code Review 公司项目代码及框架代码,未审...

5280

扫码关注云+社区