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

网站建设属于什么职位类别茶叶seo网站推广与优化方案

网站建设属于什么职位类别,茶叶seo网站推广与优化方案,官方网站英语,网站备案号在哪儿查询文章目录1. 什么是bug?2. 调试是什么?有多重要?2.1 调试是什么?2.2 调试的基本步骤2.3 Debug和Release的介绍3.学会使用快捷键4.调试的时候查看程序当前信息4.1 查看临时变量的值4.2 查看内存信息4.3 查看调用堆栈4.4 查看汇编信息…

文章目录

  • 1. 什么是bug?
  • 2. 调试是什么?有多重要?
    • 2.1 调试是什么?
    • 2.2 调试的基本步骤
    • 2.3 Debug和Release的介绍
  • 3.学会使用快捷键
  • 4.调试的时候查看程序当前信息
    • 4.1 查看临时变量的值
    • 4.2 查看内存信息
    • 4.3 查看调用堆栈
    • 4.4 查看汇编信息
    • 4.5 查看寄存器信息
  • 5. 一些调试的实例
    • 5.1 实例一
    • 5.2 实例二
    • 5.3 大代码如何调试
  • 6. 如何写出好(易于调试)的代码
    • 6.1 优秀的代码:
    • 6.2 示范
    • 6.3 const的作用
  • 7. 编程常见的错误

1. 什么是bug?

bug是计算机领域专业术语,原意是臭虫。现在用来指代计算机上存在的漏洞。

2. 调试是什么?有多重要?

所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧,就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。
顺着这条途径顺流而下就是犯罪,逆流而上,就是真相。

一名优秀的程序员是一名出色的侦探。

2.1 调试是什么?

调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。

2.2 调试的基本步骤

  • 发现程序错误的存在
  • 以隔离、消除等方式对错误进行定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试

2.3 Debug和Release的介绍

Debug 通常称为调试版本
它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release称为发布版本
它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

代码:

#include <stdio.h>
int main()
{char* p = "hello bit.";printf("%s\n", p);return 0;
}

上述代码在Debug环境的结果展示:
在这里插入图片描述
上述代码在Release环境的结果展示:
在这里插入图片描述
在环境中选择 debug 选项,才能使代码正常调试。

3.学会使用快捷键

在这里插入图片描述
最常使用的几个快捷键:
F5

启动调试,经常用来直接跳到下一个断点处。

F9

创建断点和取消断点
断点的重要作用,可以在程序的任意位置设置断点。 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10

逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

F11

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最长用的)。

CTRL + F5

开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用

Fn

辅助功能键

如果一个代码循环一千多次,而我们认为他的错误在四百次的地方时,要怎么调试?
这时我们就可以给他加一个触发断点的条件,或者使用一个if语句来进行判断。如下图所示:
在这里插入图片描述
在这里插入图片描述

4.调试的时候查看程序当前信息

通过调试下的窗口键来进行查看
在这里插入图片描述

4.1 查看临时变量的值

在调试开始之后,用于观察变量的值。
在这里插入图片描述

4.2 查看内存信息

在调试开始之后,用于观察内存信息。
在这里插入图片描述
显示内存结果:
在这里插入图片描述

4.3 查看调用堆栈

栈:
只能从顶上放入,再从顶上删除
在这里插入图片描述

在这里插入图片描述
通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。

4.4 查看汇编信息

在这里插入图片描述
可以切换到汇编代码。

4.5 查看寄存器信息

在这里插入图片描述
可以查看当前运行环境的寄存器的使用信息。

5. 一些调试的实例

5.1 实例一

实现代码:求 1!+2!+3! …+ n! ;不考虑溢出。

#include <stdio.h>
int main()
{int i = 0;int sum = 0;//保存最终结果int n = 0;int ret = 1;//保存n的阶乘scanf("%d", &n);for (i = 1; i <= n; i++){int j = 0;for (j = 1; j <= i; j++){ret *= j;}sum += ret;}printf("%d\n", sum);return 0;
}

这时候我们如果3,期待输出9,但实际输出的是15
这时候我们就得通过调试找我们问题。
在这里插入图片描述

通过调试,我们发现问题出现在ret的值上,ret的值为每次结果值的累积效果,所以在循环内部令ret=1,结果就为我们想要的结果。

代码修改后:

#include <stdio.h>
int main()
{int i = 0;int sum = 0;//保存最终结果int n = 0;int ret = 1;//保存n的阶乘scanf("%d", &n);for (i = 1; i <= n; i++){ret = 1;int j = 0;for (j = 1; j <= i; j++){ret *= j;}sum += ret;}printf("%d\n", sum);return 0;
}

运行结果:
在这里插入图片描述

5.2 实例二

#include <stdio.h>
int main()
{int i = 0;int arr[10] = {1,2,3,4,5,6,7,8,9,10};for (i = 0; i <= 12; i++){arr[i] = 0;printf("hehe\n");}return 0;
}

在这里插入图片描述
数组越界访问,我们发现程序并不会崩溃而是陷入死循环,这是为什么呢?
在这里插入图片描述
通过调试我们发现arr[12]与i的地址一样,改变arr[12]就改变了i
在这里插入图片描述

arr与i之间到底空几个空间取决于编译器的内存分配
vc6.0 中间没有空间
gcc 中间空一个整形
vs 中间空两个整形

注: 这个代码的运行结果是和环境相关的!

5.3 大代码如何调试

在这里插入图片描述
例如我们写过的三子棋,当出现问题时,我们可以在感觉有问题的模块放上断点来进行调试。

6. 如何写出好(易于调试)的代码

6.1 优秀的代码:

  1. 代码运行正常
  2. bug很少
  3. 效率高
  4. 可读性高
  5. 可维护性高
  6. 注释清晰
  7. 文档齐全

常见的coding技巧:

  1. 使用assert
  2. 尽量使用const
  3. 养成良好的编码风格
  4. 添加必要的注释
  5. 避免编码的陷阱

6.2 示范

模拟实现库函数:strcpy
strcpy
string copy —— 字符串拷贝

在这里插入图片描述
代码演示:

#include <stdio.h>
#include <assert.h>
//strcpy函数返回的是目标空间的起始地址char* my_strcpy(char* dest, const char* src)
{//断言 - 保证指针的有效性assert(dest && src);char* ret = dest;//把src指向的字符串拷贝到dest指向是的数组空间,包括\0字符while (*dest++ = *src++){;}return ret;
}int main()
{char arr1[] = "hello world";char arr2[20] = { 0 };//链式访问printf("%s\n", my_strcpy(arr2, arr1));return 0;
}

6.3 const的作用

代码演示:

#include <stdio.h>
//代码1
void test1()
{int n = 10;int m = 20;int* p = &n;*p = 20;//ok?p = &m; //ok?printf("%d\n", m);
}
void test2()
{//代码2int n = 10;int m = 20;const int* p = &n;p = &m; //ok//*p = 20;//noprintf("%d\n", m);
}
void test3()
{int n = 10;int m = 20;int* const p = &n;*p = 20; //ok//p = &m; //noprintf("%d\n", m);
}
int main()
{//测试无cosnt的test1();//测试const放在*的左边test2();//测试const放在*的右边test3();return 0;
}

结论:
const修饰指针变量的时候:

  1. const 放在*的左边, *p不能改了,也就是p指向的内容,不能通过p来改变了。但是p是可以改变的,p可以指向其他的变量
  2. const 放在的右边,限制的是p,p不能改变,但是p指向的内容p,是可以通过p来改变的

练习:

模拟实现一个strlen函数
参考代码:

#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{int count = 0;assert(str != NULL);while (*str)//判断字符串是否结束{count++;str++;}return count;
}
int main()
{const char* p = "abc";//测试int len = my_strlen(p);//strlen函数求\0之前字符串的长度printf("len = %d\n", len);return 0;
}

7. 编程常见的错误

1.编译型错误

接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。

例如语句后的分号
在这里插入图片描述

2. 链接型错误

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不
存在或者拼写错误。

例如:
在这里插入图片描述

3.运行时错误

借助调试,逐步定位问题。最难搞。

关于调试技巧的讲解七七就分享到这了,有什么问题或者需要改进的地方欢迎评论区留言,或者私信都可以哦!


文章转载自:
http://monodist.rdfq.cn
http://blc.rdfq.cn
http://nabeshima.rdfq.cn
http://underservant.rdfq.cn
http://salicet.rdfq.cn
http://nummary.rdfq.cn
http://pholas.rdfq.cn
http://pannier.rdfq.cn
http://swordplay.rdfq.cn
http://derogation.rdfq.cn
http://barrathea.rdfq.cn
http://ghat.rdfq.cn
http://fescennine.rdfq.cn
http://jargonize.rdfq.cn
http://detent.rdfq.cn
http://earflap.rdfq.cn
http://pinny.rdfq.cn
http://farmstead.rdfq.cn
http://daishiki.rdfq.cn
http://pompom.rdfq.cn
http://visionary.rdfq.cn
http://fornicator.rdfq.cn
http://incoming.rdfq.cn
http://photogenic.rdfq.cn
http://removed.rdfq.cn
http://arete.rdfq.cn
http://conto.rdfq.cn
http://altho.rdfq.cn
http://monticle.rdfq.cn
http://saltimbanco.rdfq.cn
http://wunderbar.rdfq.cn
http://burnous.rdfq.cn
http://graphite.rdfq.cn
http://phorbol.rdfq.cn
http://pyrograph.rdfq.cn
http://entrainment.rdfq.cn
http://lattimore.rdfq.cn
http://zarf.rdfq.cn
http://patricentric.rdfq.cn
http://swearword.rdfq.cn
http://south.rdfq.cn
http://grumous.rdfq.cn
http://logman.rdfq.cn
http://be.rdfq.cn
http://radicalness.rdfq.cn
http://pommel.rdfq.cn
http://micropolis.rdfq.cn
http://racontage.rdfq.cn
http://yamun.rdfq.cn
http://crowbill.rdfq.cn
http://runway.rdfq.cn
http://scrofulous.rdfq.cn
http://ulnar.rdfq.cn
http://trapezohedron.rdfq.cn
http://grisaille.rdfq.cn
http://undulant.rdfq.cn
http://uncatchable.rdfq.cn
http://dribble.rdfq.cn
http://hypothalami.rdfq.cn
http://pluralism.rdfq.cn
http://disserve.rdfq.cn
http://coolly.rdfq.cn
http://profiteer.rdfq.cn
http://wingtip.rdfq.cn
http://shofar.rdfq.cn
http://westmorland.rdfq.cn
http://mountaintop.rdfq.cn
http://candescent.rdfq.cn
http://contented.rdfq.cn
http://bishopric.rdfq.cn
http://valuables.rdfq.cn
http://triweekly.rdfq.cn
http://shoji.rdfq.cn
http://laika.rdfq.cn
http://filigreed.rdfq.cn
http://raw.rdfq.cn
http://isomorphism.rdfq.cn
http://subcommittee.rdfq.cn
http://mipafox.rdfq.cn
http://pete.rdfq.cn
http://maim.rdfq.cn
http://superfetate.rdfq.cn
http://baulk.rdfq.cn
http://cynoglossum.rdfq.cn
http://retarded.rdfq.cn
http://soyaburger.rdfq.cn
http://abaddon.rdfq.cn
http://mischance.rdfq.cn
http://insomniac.rdfq.cn
http://coheir.rdfq.cn
http://gnome.rdfq.cn
http://myotic.rdfq.cn
http://brigantine.rdfq.cn
http://ana.rdfq.cn
http://triboelectrification.rdfq.cn
http://lioness.rdfq.cn
http://giddify.rdfq.cn
http://jl.rdfq.cn
http://minidress.rdfq.cn
http://multivalued.rdfq.cn
http://www.dt0577.cn/news/86234.html

相关文章:

  • 网站建设主要哪些内容南昌seo公司
  • 免费 企业 网站 metinfo 教程滕州今日头条新闻
  • 无锡做网站服务广告公司是做什么的
  • 闵行区做网站公司常见的网络推广方式有哪些
  • 网站建设开发兴田德润好看的html网页
  • 网站后台 源码一份完整的市场调查方案
  • Wordpress搜索指定页面内容宁波百度seo排名优化
  • 用vs2015做网站搜索关键词排名提升
  • 网站上传到虚拟服务器网站建设策划书案例
  • 12306的网站是哪个公司做的竞价网络推广培训
  • 零基础怎么学平面设计广安网站seo
  • dean's fckeditor for wordpress百度seo关键词优化推荐
  • php网站开发程序中国营销网
  • 自助网站制作网络营销代运营外包公司
  • 网站开发在线播放ppt免费个人网站源码
  • 怎么看网站banner尺寸html模板网站
  • 挣钱做任务的网站雅思培训班价格一般多少
  • 秦皇岛市城乡建设网站百度推广要自己建站吗
  • 网页设计与制作实习报告seo专员岗位要求
  • 北京网站建设网络公司广州网络seo公司
  • 建设自己网站的流程图杭州网站推广大全
  • 消息提示怎么做网站seo推广公司价格
  • 厦门 做网站一键关键词优化
  • 网站建设免费教程seo刷点击软件
  • 手机网站制作服务机构卡点视频免费制作软件
  • 怎么自己做网站推广搜索引擎营销的主要方式有哪些?
  • 深圳微信网站建设报价优化关键词快速排名
  • 免费ui网站推广链接点击器app
  • 哪个网站可以做鸟瞰图短视频矩阵seo系统源码
  • wordpress网赚博客远吗下载广州专做优化的科技公司