八 、VS的调试技巧

news2025/2/27 7:13:36

                                                                                                                                     --- 24.4.20

目录

1、什么是Bug?

2、什么是调试(Debug)?

3、Debug和Release

4、VS基础调试快捷键

4.1、环境准备

4.2、调试快捷键

5、监视和内存观察

5.1、监视窗口

5.2、内存窗口

6、调试举例1

7、调试举例2

8、调试举例3

9、编程常见的错误归类

9.1、编译型错误

9.2、链接型错误

9.3、运行时错误


1、什么是Bug?

一般指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞,也叫Bug。

2、什么是调试(Debug)?

当发现程序中存在问题时,下一步就是找到问题并修复问题,这个找问题的过程称为调试,英文叫Debug,是消灭问题的意思。

调试一个程序,首先是承认出现了问题,然后通过各种手段去定位问题的位置,可能是逐过程的调试,也可能是隔离屏幕代码的方式,找到问题所在的位置,然后确定错误产生的原因,再修复代码,重新测试。

3、Debug和Release

Debug通常称为调试版本:它包含调试信息,并且不做任何优化,便于程序员调试程序;用Debug版本写代码,编译产生的是Debug版本的可执行程序,其中包含调试信息,是可以直接调试的。

Release通常称为发布版本:他往往进行了各种优化,使得程序在代码大小和运行速度上都是最优的。当写完代码使其程序质量符合交付于用户使用的标准,这时就会设置为Release版本,这个是给用户使用的。

Debug由于包含了调试信息,所以内存会更大一些。

4、VS基础调试快捷键

在这里我们将学习程序员是如何调试代码的

4.1、环境准备

首先是环境的准备,需要一个支持调试的开发环境,所以应把编译环境设置为Debug版本。

4.2、调试快捷键

F9:创建断点和取消断点。

F5:启动调试,经常用来跳到下一个断点处,一般是和F9配合使用。

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

F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部。在函数调用的地方,想进入函数观察细节,必须使用F11,如果使用F10,就会直接完成函数的调用。

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

条件断点:在断点处右击鼠标设置断点的条件。

5、监视和内存观察

5.1、监视窗口

①打开监视窗口(F10开始调试后才能使用监视窗口)

5.2、内存窗口

打开内存窗口

这里列太长了不好观察,可以将列设置为4跟方便观察。

在这里解释一下内存窗口:

与以上相似的窗口还有很多,如:自动窗口(自动帮长序员观察一些值,但是用起来不够方便,所以一般用的比较少)、反汇编(把语句转换成汇编代码)、寄存器(暂存数据)。

6、调试举例1

求:1!+ 2!+ ... +10!

在这里我们先用3试一下值是否正确

这里的结果本应该是9,但是实际编译器出现的是15,实际的结果和预期是不相等的,这就是Bug。

下面我们借助调试解决问题:

经过调试后发现每次进行第二个for循环中ret的值都会保留上一次的值进行运算,所以在进行第二个for循环之前应该加上一个ret = 1;才能解决这个问题。

解决完问题后我们来想一下:

每次

这样会很占用空间,而且过程也很麻烦。

我们下面来进行程序的优化:

7、调试举例2

在VS2022、X86、Debug环境下:

这里我们发现程序进入了死循环在这里我要解释一下:

①i和arr是局部变量,局部变量放在内存的栈区

②战区上的内存的使用习惯是:先使用高地址的空间,在使用低地址的空间

这里我们可以画一幅图更好的展示一下:

i 和 arr 中间空多大空间,完全是取决于编译器的实现,在VS中刚好这里 i 和 arr 中间空了两个整型,所以当 arr[12] 的值会替换 i 的值,从而开始死循环。

不同的编译器中间的空隙不同,如果在VC6.0中这个代码 arr 和 i 之间没有空隙;如果在gcc中这个代码 arr 和 i 之间空一个整型。

8、调试举例3

注意在监视时,观察自定义函数中的值时,想观察一维数组前10个元素应该在监视窗口中输入arr3,10;如果想观察二维数组,则应输入arr4,3。

9、编程常见的错误归类

编程常见错误分为三种:编译型错误、链接型错误、运行时错误。

9.1、编译型错误

编译型错误一般都是语法错误,这类错误一般看错误信息就能找到一些蛛丝马迹的,双击错误信息也能初步跳转到代码错误的地方或者附近。编译错误随着语言的熟练掌握会越来越少,也容易解决。

9.2、链接型错误

编译器报错时会出现“无法解析的外部符号”如下:

这里是由于未包含头文件<stdio.h>

也一样是链接型错误,这里报错是因为函数Add未定义。

9.3、运行时错误

运行时错误需要借助调试,逐步定位问题,调试解决的是运行时问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1823611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI宣传文案软件有哪些?5款AI软件推荐

AI宣传文案软件有哪些&#xff1f;AI宣传文案软件在现代营销和创意产业中扮演着越来越重要的角色&#xff0c;它们凭借先进的自然语言处理、机器学习和深度学习技术&#xff0c;不仅解放了创作者的双手&#xff0c;还大大提升了文案的生成效率和质量。这些软件能够精准捕捉用户…

Polarion重启时自动删除.config

Polarion二次开发的插件中&#xff0c;对Servlet新增、修改或删除时&#xff0c;发布到应用需要删除.config文件才能使修改生效&#xff0c;每次需要手动执行&#xff0c;不如加到restart启动脚本中。只需修改start函数即可。 代码如下&#xff1a; vi /opt/polarion/bin/pola…

(科学:某天是星期几)泽勒一致性是由克里斯汀·泽勒开发的用于计算某天是星期几的算法。

(科学:某天是星期几)泽勒一致性是由克里斯汀泽勒开发的用于计算某天是星期几的算法。这个公式是: 其中: h是一个星期中的某一天(0 为星期六;1 为星期天;2 为星期一;3 为星期二;4 为 星期三;5 为星期四;6为星期五)。 q 是某月的第几天。 m 是月份(3 为三月&#xff0c;4 为四月,…

包装类的应用

一.什么是包装类 基本数据类型所对应的引用数据类型 二.集合中不能存储基本数据类型 三.JDK5以后对包装类新增了什么特性&#xff1f; // 自动装箱:把基本数据类型会自动的变成对应的包装类 // 自动拆箱:把包装类自动的变成其对象的基本数据类型 四.我们以后如何获取包…

课设--学生成绩管理系统

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术核心 &#x1f349;引言 &#x1f348;标识 &#x1f348;背景 &#x1f348;项目概述 &#x1f348; 文档概述 &#x1f349;可行性分析的前提 &#x1f348;项目的要求 &#x1f348;项目的目标 &#x1f348;…

全面分析kimi和ChatGPT在论文写作方向的差别

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 Kimi和ChatGPT都是人工智能助手&#xff0c;致力于提供帮助和信息&#xff0c;但在论文写作方面&#xff0c;他们在下面几个方向的能力存在一些差别&#xff1a; 1. 语言支持&#xff…

英语学习笔记35——Our village

Our village 我们的村庄 词汇 Vocabulary photograph n. 照片 通常说&#xff1a;photo 复数&#xff1a;photos     picture 复数&#xff1a;pictures 搭配&#xff1a;take a photo 照相 以o结尾的单词复数es的&#xff1a; potato —— potatoes tomato —— tomatoe…

AI + Web3 Social Hackathon 来啦!报名参赛瓜分超 700,000+ 美元奖金池

“我们的目标是将 Web3 优质开发者聚集在一起&#xff0c;共同打造创新思维驱动的链上世界。无论你是经验丰富的开发者&#xff0c;还是刚踏上开发旅程的小白新手&#xff0c;都可以加入我们&#xff0c; 不断提升实战技能&#xff0c;让 AIWeb3 成为赋能未来的重要砝码。” 为…

DiffusionDet:用于物体检测的扩散模型

论文标题&#xff1a;DiffusionDet: Diffusion Model for Object Detection 论文地址&#xff1a;https://arxiv.org/pdf/2211.09788 DiffusionDet&#xff1a;用于物体检测的扩散模型 检测模型发展物体检测 DiffusionDet方法预备知识DiffusionDet前向扩散过程DiffusionDet反向…

MaptrV2代码阅读

一 数据处理&#xff08;后续补充&#xff09; 二 模型结构 2.1 BackboneNeck 这里输入不加时序的单帧图片&#xff0c;一共六张&#xff0c;输入图片大小为 B ∗ 6 ∗ 3 ∗ 480 ∗ 800 &#xff08; B 是 b a t c h s i z e &#xff09; B*6*3*480*800 &#xff08;B是bat…

java中的输入与输出(I/O)

Java I/O&#xff08;输入/输出&#xff09;是Java程序与外部世界进行交互的重要机制&#xff0c;它允许程序读取和写入数据到各种类型的源&#xff0c;如文件、网络套接字、管道、内存缓冲区等。Java I/O API主要位于java.io包中&#xff0c;提供了丰富的类和接口来处理不同类…

ipad协议已更新

mmtls 24算法&#xff0c;by golang 其他/v1/other POST/v1/other/GetPeopleNearby 查看附近的人 POST/v1/other/GetQrCode 获取二维码 同步消息/v1/ws GET/v1/ws/GetSyncMsg 同步消息&#xff0c;ws协议 消息/v1/message POST/v1/message/AddMessageMgr 添加要发送…

知识表示与推理方法前沿文献报告

✅作业要求&#xff1a; 练习目标:以公开发表的英文学术文献如会议和期刊论文为依据&#xff0c;报告知识表示与推理的前沿研究进展 作业形式: 8-10页的调研报告&#xff0c;以Word或者PDF为文件格式&#xff0c;文件名: 学号 姓名 krdocx/PDF作业完成内容: 1.题目: 文献报告-文…

车道偏离预警系统技术规范(简化版)

车道偏离预警系统技术规范&#xff08;简化版&#xff09; 1 系统概述2 预警区域3 功能条件4 显示需求5 指标需求 1 系统概述 车道偏离预警系统工作在中高速驾驶的情况下&#xff0c;当驾驶员因注意力不集中导致车辆偏离本车道时&#xff0c;系统通过光学和声学信号对驾驶员进行…

vue+elementUI实现在表格中添加输入框并校验的功能

背景&#xff1a; vue2elmui 需求&#xff1a; 需要在一个table中添加若干个输入框&#xff0c;并且在提交时需要添加校验 思路&#xff1a; 当需要校验的时候可以考虑添加form表单来触发校验&#xff0c;因此需要在table外面套一层form表单&#xff0c;表单的属性就是ref…

6月17日15点丨解锁大消费品行业收入管理秘籍

在数字化浪潮席卷全球的今天&#xff0c;企业对于收入管理的精细化和智能化需求日益凸显。收入管理作为企业运营的核心环节,对企业的现金流、利润和发展战略至关重要。 在消费品行业&#xff0c;往往拥有大量的销售数据和客户信息&#xff0c;但这些数据往往分散在多个系统和部…

简单了解MySql以及一些简单的应用MySql

MySql基础篇 1、数据模型概述 关系型数据库 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 数…

基于WPF技术的换热站智能监控系统08--实现右上模式控制

1、区域划分 2、UI设计 3、样式及触发器 4、运行效果 走过路过不要错过&#xff0c;点赞关注收藏又圈粉&#xff0c;共同致富&#xff0c;为财务自由作出贡献

【leetcode--单词规律】

题目要求&#xff1a; 跟上一个字符串的思路一致&#xff0c;只是要进行单词的拆分&#xff0c;用.split()函数即可。 class Solution:def wordPattern(self, pattern: str, s: str) -> bool:word s.split()if(len(pattern) ! len(word)):return Falsereturn len(set(patt…

TCP/IP协议,三次握手,四次挥手

IP - 网际协议 IP 负责计算机之间的通信。 IP 负责在因特网上发送和接收数据包。 HTTP - 超文本传输协议 HTTP 负责 web 服务器与 web 浏览器之间的通信。 HTTP 用于从 web 客户端&#xff08;浏览器&#xff09;向 web 服务器发送请求&#xff0c;并从 web 服务器向 web …