一定要掌握的实用调试技巧(vs2019)(上)

简介: 一定要掌握的实用调试技巧(vs2019)(上)

1、什么是bug?


BUG的英文释义是“虫子”,现在人们将再电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞),人类历史上第一个程序BUG就是与虫子有关。

1937年,一个年轻的美国小伙找到IBM公司要了200万叨做计算机,第一台成品取名为“马克1号”,写代码的是一个小妮·雷斯·霍波。有一天,他在调试程序时出现故障,经过一阵子周折,发现有只飞蛾被烤糊在两个继电器触电的中间导致短路。于是把程序故障统称为“臭虫BUG”。从此这只虫子名垂千古,永远的保存在了华盛顿的美国国家历史博物馆中


2、调试是什么?


       2.1、调试是什么


一般指的你写的代码,在Debug模式下编译以后,编译器在你的代码里插入了调试信息,你可以一步一步运行程序,查看中间结果,适用于你程序运行不对,需要检查中间过程确定问题源头的时候。


       2.2、调试的基本步骤


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

       2.3、Debug和Release的介绍


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

  • 可在编译器此处选择配置

 

3、Windows环境调试介绍


       3.1、调试环境的准备


在环境中选择 debug 选项,才能使代码正常调试


       3.2、学会快捷键


下面是调试常用的快捷键:

F5: 启动调试,经常用来直接跳到下一个断点处(若没有断点将运行整个程序)

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

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

F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使执行逻辑进入函数内部,这是最常用的

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


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


注意:以下所有内容都是在调试开始后才可操作的


               3.3.1、查看临时变量的值


四个监视窗口都可以用,只需要在监视名称是输入合法的监视内容即可

               3.3.2、查看内存信息


与监视窗口同理,四个口都可以用

在地址处输入你要查询的地址,在列处可以自己进行选择

选定后回车即可查看

               3.3.3、查用调用堆栈


               3.3.4、查看汇编信息


               3.3.5、查看寄存器信息



4、调试的实例


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


调试如下


相关文章
|
消息中间件 存储 Cloud Native
基于 RocketMQ 的云原生 MQTT 消息引擎设计
本文将介绍阿里云如何将 Serverless 架构应用于消息队列,有效降低运营成本,同时利用云原生环境的特性,为 IoT 设备提供快速响应和灵活伸缩的通讯能力。
466 139
|
9月前
|
存储 安全 BI
PeopleSoft中的文件上传与下载:实现与优化
PeopleSoft中的文件上传与下载:实现与优化
269 7
|
机器学习/深度学习 传感器 算法
【ANFIS 回归预测】基于平均定位误差 D 的 ANFIS 实现数据非线性回归附matlab代码
【ANFIS 回归预测】基于平均定位误差 D 的 ANFIS 实现数据非线性回归附matlab代码
|
编解码 缓存 移动开发
一文读懂云渲染“串流”全链路时延及优化策略
这是一个让云游戏完美起步的时代。
2394 0
一文读懂云渲染“串流”全链路时延及优化策略
|
XML 移动开发 API
Qt之解析XML(QXmlStreamReader)
简述 QXmlStreamReader 类提供了一个快速解析器,用于通过简单的流 API 读取格式良好的 XML。与之相对应的是 QXmlStreamWriter(写入 XML)。 相比较 Qt 自己的 SAX 解析器(见 QXmlSimpleReader),QXmlStreamReader 更快,更方便。某些情况下,在使用 DOM 树(见 QDomDocument)的应
6500 0
|
7天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
1天前
|
弹性计算 人工智能 安全
云上十五年——「弹性计算十五周年」系列客户故事(第二期)
阿里云弹性计算十五年深耕,以第九代ECS g9i实例引领算力革新。携手海尔三翼鸟、小鹏汽车、微帧科技等企业,实现性能跃升与成本优化,赋能AI、物联网、智能驾驶等前沿场景,共绘云端增长新图景。
|
6天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
6天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。