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

汕头站扩建有连接华东线吗沈阳网站制作

汕头站扩建有连接华东线吗,沈阳网站制作,长沙建设教育网站,明星 卡片网站该怎么做文章目录 Ⅰ 调试的介绍Ⅱ 常用调试快捷键Ⅲ 调试的时候查看程序当前信息⒈查看临时变量的值⒉查看内存信息⒊查看调用堆栈⒋查看汇编信息⒌查看寄存器信息 Ⅳ 观察形参指针指向的数组Ⅴ 易于调试的代码该如何编写⒈const 修饰指针变量⒉良好代码示范 Ⅵ 编程中常见的错误 Ⅰ 调…

文章目录

  • Ⅰ 调试的介绍
  • Ⅱ 常用调试快捷键
  • Ⅲ 调试的时候查看程序当前信息
    • ⒈查看临时变量的值
    • ⒉查看内存信息
    • ⒊查看调用堆栈
    • ⒋查看汇编信息
    • ⒌查看寄存器信息
  • Ⅳ 观察形参指针指向的数组
  • Ⅴ 易于调试的代码该如何编写
    • ⒈const 修饰指针变量
    • ⒉良好代码示范
  • Ⅵ 编程中常见的错误

Ⅰ 调试的介绍

1. 什么是调试

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

2. 调试的基本步骤

  1. 发现程序的错误的存在(开发 → 测试 → 用户)。
  2. 以隔离、消除等方式对错误进行定位。
  3. 确定错误产生的原因。
  4. 提出纠正错误的解决办法。
  5. 对程序错误允以改正,重新测试。

3. Debug 和 Release 的介绍

  • Debug 称为调试版本,它包含有各种调试信息,且不作任何优化,所占空间更大。
  • Release 称为发布版本,此版本进行了优化,不包含调试信息,用户使用的以及测试人员检测的都是这个版本。

在这里插入图片描述

4. 调试环境的准备

  • 在环境中选择 Debug 选项,只有在这里才可以进行调试。

Ⅱ 常用调试快捷键

  • 注意:以下所有快捷键如果不起作用的话,请搭配 FN 键使用。

F5

  • 启动调试:用于直接跳到下一个断点处,经常和 F9 成对使用。

F9

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

F10

  • 逐过程调试:通常用于处理一个过程,一个过程可以是一次函数调用,或是一条语句。
  • 当碰到函数调用时,不会进到函数内部,无法观测到函数体内部的细节。

F11

  • 逐语句调试:每次都执行一条语句,可以进入函数体观察函数内部的细节。

CTRL + F5

  • 开始执行不调试:用于让程序直接运行起来而不进行调试,学习编程初期使用的最多的就是这个。

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

  • 进入调试之后,在调试窗口中才能看到下面的信息。

在这里插入图片描述

⒈查看临时变量的值

  • 在调试开始之后,用于观察变量内存放的值的变化。
  • 自动窗口与监视窗口都能够观察到局部变量的信息。

在这里插入图片描述

自动窗口与监视窗口的区别

  • 自动窗口会自动显示所有局部变量的信息(不管你是否需要),随着调试的进程,自动窗口内所观察的变量有时会自动出现,有时又会自动消失。
  • 监视需要程序员手动输入(想观察谁就输入谁),观察的变量不会随着调试的进程而消失,强雷建议使用监视窗口来观察局部变量的值。

⒉查看内存信息

在这里插入图片描述

⒊查看调用堆栈

调用堆栈

  • 调用堆栈,反应的是函数的调用关系。
  • 后期当遇到很复杂的函数关系的时候,就可以使用调用堆栈来理清函数之间的调用关系。

举个栗子

  • 现有以下代码:

在这里插入图片描述

  • main 函数调用了 test1,test1调用了 test2,test2 → test3。
  • 而 main 函数又是被其他函数所调用的。
  • 函数调用采用的是数据结构中 的先进后出的特性,先调用的函数后结束。

⒋查看汇编信息

  • 查看 C 语言代码所翻译出来的汇编代码。

在这里插入图片描述

⒌查看寄存器信息

  • 用于查看当前运行环境的寄存器的使用信息。

在这里插入图片描述

Ⅳ 观察形参指针指向的数组

  • 众所周知,在给函数传数组名的时候,传递的是数组首元素的地址;
  • 这样一来的话,在函数内部调试的时候,只是输入个数组名就不能很好的观察到数组内部的值的变化。

在这里插入图片描述

  • 但是,只要在我们想要观察的数组指针变量名后面加上 " 逗号 " 和 " 想要观察的元素个数 " 就可以很好观察到数组内部元素的值了。

在这里插入图片描述

二维数组同理

  • 如果将二维数组名作为参数传给函数的话,观察函数形参的二维数组指针也就只能观察到原数组第一行的内容。
  • 因为二维数组的数组名为第一行的地址。

Ⅴ 易于调试的代码该如何编写

1. 什么是高质量的代码

  1. 代码能够正常运行。
  2. 尽可能少的 BUG(不可能没有BUG)。
  3. 可执行效率够高。
  4. 可读性要强。
  5. 可维护性高。
  6. 注释要清晰,能让人看得懂。
  7. 相应文档齐全。

2. 常用编程技巧

  1. 使用 assert 断言。
    • assert 的表达式如果为假则直接结束程序并报错,使用 assert 来判断指针是否指向 NULL。
  2. 尽量使用 const 修饰变量(包括变量和指针变量)。
  3. 养成良好的编码风格。
  4. 添加必要的注释。
  5. 避免编码的陷阱。

⒈const 修饰指针变量

  • const 可以修饰普通的变量,让变量的值无法被修改,从而变成常变量(本质任然是个变量)。

在这里插入图片描述

  • 同样的,const 也可以用来修饰指针变量。const 修饰指针有两种形式。

  • 对于指针变量来说,应该关注的有两点:

    1. 指针变量本身能不能改;
    2. 指针变量指向的那个变量能不能改。
  • const 放置的位置就决定了能不能修改这两种值。

1. const 放在 * 的左边

const int* p = &n;	//只要 const 放在 * 的左边,这两中写法就都一样。
int const* p = &n;	
  • 限制的是指针指向的内容,也就是限制了 *p,让指针指向的那个变量的值无法被修改。
  • 但是指针变量是可以修改的,指针可以指向其他变量。

在这里插入图片描述

2. const 放在 * 的右边

int* const p = &n;
  • 限制的是指针变量本身,在 p 已经指向了 n 之后,p 就不能再被修改为指向其他变量了。
  • 但是可以通过指针变量修改指向的内容。

在这里插入图片描述

  • 当在 * 的两边都加上 const 之后,p 就只能指向 n,并且*p 也不能改变 n 的值了。

在这里插入图片描述

⒉良好代码示范

模式实现 strcpy

#include <stdio.h>
#include <assert.h>//我只想改变 str1,不想改变 str2 ,const 保证 src 指针指向的 str2 数组内的值不会一不小心被修改
char* my_strcpy(char* dest, const char* src)
{assert(dest && src);			//当传过来的两个指针为 NULL 时,直接结束程序并报错char* ret = dest;				//保存目的地首元素的地址,一会还要传回去while (*dest++ = *src++)		//直到 *src = \0,然后由于是后置++,再将 \0 也赋值给 dest 为止{;}return ret;						//返回 dest 的起始地址
}	int main()
{char str1[20] = "***************";char str2[]   = "hello word!";printf("%s\n", my_strcpy(str1, str2));return 0;
}

在这里插入图片描述

模拟实现 strlen

#include <stdio.h>
#include <assert.h>size_t my_strlen(const char* str)	//防止原数组中得内容不小心被修改
{assert(str);					//判断传过来的指针的有效性 (!= NULL)const char* end = str;			//标识字符串末尾while (*end++);					//当 end 指向 \0 时退出循环return (end - str - 1);			//指针 - 指针得到同一块空间的两个地址之间的元素个数//-1 是因为后置 ++ 的副作用,要把 \0 的那一个元素去掉
}int main()
{char str[] = "hello word!";printf("%zd\n", my_strlen(str));return 0;
}

在这里插入图片描述

Ⅵ 编程中常见的错误

1. 编译型错误

  • 一般为语法错误
  • 这类错误直接查看错误提示信息(双击),解决问题,或者凭借经验就可以搞定。

2. 链接型错误

  • 一般为未包含头文件符号名(函数名、变量名)不存在或者拼写错误
  • 看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。

3. 运行时错误

  • 一般为程序运行起来时发现的错误
  • 只能借助调试定位到问题所在,这种问题最难解决。

文章转载自:
http://ameboid.tbjb.cn
http://occupier.tbjb.cn
http://absorbate.tbjb.cn
http://megaparsec.tbjb.cn
http://readmitance.tbjb.cn
http://isoprenoid.tbjb.cn
http://coleopterous.tbjb.cn
http://organiger.tbjb.cn
http://hemipod.tbjb.cn
http://malformed.tbjb.cn
http://whoa.tbjb.cn
http://turbulence.tbjb.cn
http://insonify.tbjb.cn
http://phosphate.tbjb.cn
http://girsh.tbjb.cn
http://raised.tbjb.cn
http://soldier.tbjb.cn
http://endocrine.tbjb.cn
http://ectoblast.tbjb.cn
http://immaterialism.tbjb.cn
http://accruement.tbjb.cn
http://velour.tbjb.cn
http://dramatically.tbjb.cn
http://feeblish.tbjb.cn
http://rhumbatron.tbjb.cn
http://centrality.tbjb.cn
http://unillusioned.tbjb.cn
http://recognizee.tbjb.cn
http://downlink.tbjb.cn
http://liveware.tbjb.cn
http://furcation.tbjb.cn
http://tallith.tbjb.cn
http://unknowing.tbjb.cn
http://reata.tbjb.cn
http://balneal.tbjb.cn
http://goof.tbjb.cn
http://metate.tbjb.cn
http://gilly.tbjb.cn
http://teleological.tbjb.cn
http://epidote.tbjb.cn
http://chaliced.tbjb.cn
http://reclassification.tbjb.cn
http://bedstead.tbjb.cn
http://disappreciation.tbjb.cn
http://skerry.tbjb.cn
http://leadswinger.tbjb.cn
http://strelitzia.tbjb.cn
http://archaeopteryx.tbjb.cn
http://mapping.tbjb.cn
http://cholecystagogue.tbjb.cn
http://cisrhenane.tbjb.cn
http://silverpoint.tbjb.cn
http://rheumatology.tbjb.cn
http://periocular.tbjb.cn
http://hebraism.tbjb.cn
http://exurb.tbjb.cn
http://rouge.tbjb.cn
http://halliard.tbjb.cn
http://fissiped.tbjb.cn
http://honeymouthed.tbjb.cn
http://analysissitus.tbjb.cn
http://slipway.tbjb.cn
http://fuss.tbjb.cn
http://contrariant.tbjb.cn
http://barbitone.tbjb.cn
http://amulet.tbjb.cn
http://pim.tbjb.cn
http://hematocyst.tbjb.cn
http://voltolize.tbjb.cn
http://kmt.tbjb.cn
http://suppose.tbjb.cn
http://phosphonium.tbjb.cn
http://scavenge.tbjb.cn
http://integrity.tbjb.cn
http://libate.tbjb.cn
http://offend.tbjb.cn
http://antihydrogen.tbjb.cn
http://unsymmetrical.tbjb.cn
http://tartarus.tbjb.cn
http://megaparsec.tbjb.cn
http://tupek.tbjb.cn
http://rearrangement.tbjb.cn
http://campership.tbjb.cn
http://sacahuiste.tbjb.cn
http://microlanguage.tbjb.cn
http://novitiate.tbjb.cn
http://centerpiece.tbjb.cn
http://minitype.tbjb.cn
http://acholuria.tbjb.cn
http://creviced.tbjb.cn
http://prohibitive.tbjb.cn
http://centreless.tbjb.cn
http://sigmoidostomy.tbjb.cn
http://greenskeeper.tbjb.cn
http://giggle.tbjb.cn
http://multinuclear.tbjb.cn
http://endotoxin.tbjb.cn
http://aspersion.tbjb.cn
http://purlin.tbjb.cn
http://lucidness.tbjb.cn
http://www.dt0577.cn/news/58359.html

相关文章:

  • 网站外链代发线下推广方式
  • 网站数据分析表格企业公司网站建设
  • 学做家常菜的网站 知乎上海最新事件
  • 看p站用什么浏览器百度手机助手安卓版下载
  • 北京丰台做网站网络推广运营主要做什么
  • 做摘抄的网站机器人编程培训机构排名
  • 做网站都需要服务器吗外贸网络推广怎么做
  • 公司网站建设方案搜索竞价
  • 南汇网站建设竞价推广网络推广运营
  • 插画设计网站推荐优化什么
  • 怎么样注册自己的网站网站关键词优化排名软件
  • 黄石做网站游戏推广是干什么的
  • 企业网站模板专业网百度seo点击软件
  • 网站建设 上海交大bilibili推广网站
  • 什么网站源码做分类信息网站好长春seo招聘
  • 网站的设计理念太原seo软件
  • 西安做网站找哪家公司好百度关键词竞价
  • 网站开发文档价格推广赚钱app排行榜
  • 济南官网网站关键词优化公司哪家好
  • 大名网站建设费用泉州关键词优化排名
  • 中国企业网站设计案例网站联盟
  • 企业如何打造品牌淄博网站优化
  • 网站建设管理维护制度优化的含义是什么
  • 中国哪里疫情又严重了手机网站排名优化软件
  • 做影视网站 片源从哪里来seo公司广州
  • 网页设计网站开发教程兰州网络推广优化服务
  • 一台vps可以做几个网站cpa推广平台
  • 怎样在网做旅游网站整合营销活动策划方案
  • 做网站一年费用九幺seo优化神器
  • 做网站需要什么执照酒店线上推广方案有哪些