关于vs调试的一些基本技巧方法,建议新手学习

news2024/11/15 13:27:25

文章目录

  • 1.Debug 和 Release
  • 2.VS的调试快捷键
  • 3.对程序的监视和内存观察
    • 3.1监视
    • 3.2内存
  • 4.编程常见错误归类
    • 4.1编译型错误
    • 4.2链接型错误
    • 4.3运行时错误

1.Debug 和 Release

在这里插入图片描述

在我们使用的编译器 vs 中,这个位置有两个选项,分别为DebugRelease,它们有什么作用呢?

Debug:Debug通常称为调试版本它包含调试信息,并且不作任何优化,便于程序员调试程序;
程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为 debug ,这样编译产⽣的是
debug 版本的可执⾏程序,其中包含调试信息,是可以直接调试的。所以我们每次开始写代码的时候一般都是为Debug模式。

Release:Release 称为发布版本它往往是进⾏了各种优化,使得程序在代码大小和运⾏速度上都是最优的,以便用户很好地使用。当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付客户使用的标准,这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执⾏程序,这个版本是用户使用的,⽆需包含调试信息等。

我们在编译器写下以下代码,并分别在Debug和Release条件下运行一下,然后再看看与之相对于的文件。
在这里插入图片描述
Debug条件下:
在这里插入图片描述
Release条件下:
在这里插入图片描述


对⽐之下我们可以看到从同⼀段代码,编译生成的可执行⽂件的大小,release版本明显要小,而debug版本明显大,这就是两个版本有无进行优化的区别。

2.VS的调试快捷键

首先,我们想进行调试的话,编译器必须是Debug的模式
在这里插入图片描述
以下有几个调试常用的快捷键
F9:创建断点和取消断点

断点的作用是可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂定执
行,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执行细节。
条件断点:满足这个条件,才触发断点

例如下图中的红色圆圈就是断点,该断点对应第6行,启动调式时则可以让程序执行到该位置
在这里插入图片描述

F5:启动调试,经常⽤来直接跳到下⼀个断点处,⼀般是和F9配合使用
即在认为有问题想对该位置进行调式观察的地方打下断点后,F5启动调式就可以对该处进行调试

F10:逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调用,或者是⼀条语句。
比如在遇到函数调用的语句时,不会跳转到函数的内部再执行函数中的每条语句,只直接对函数调用这条语句执行一次

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

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

3.对程序的监视和内存观察

3.1监视

我们如果不调试,直接执行,那么得到的结果就直接是最终结果,而不能观察到某个值在程序中是如何变化的。
所以如果我们想要知道该值在程序中是如何变化的,我们就可以在调试的情况下打开监视窗口

开始调试后,在菜单栏中【调试】->【窗口】->【监视】,打开任意⼀个监视窗⼝,输⼊想要观察的对象就可以了。
在这里插入图片描述
例如:
这里可以看到执行到此处时,a是5
在这里插入图片描述
执行到此处时,a就变成了15
在这里插入图片描述

3.2内存

如果监视窗口看的不够仔细,也可以观察变量在内存中的存储情况,在【调试】->【窗口】->【内存】打开内存窗口:
在这里插入图片描述
我们在调试的条件下,可以通过&来获取某个值的地址,从而查看该值在内存中的情况。

如:
想要知道b的内存情况,就&吧,然后按下回车
在这里插入图片描述
我们就可以找到该值所在地址,并且知道它的内存,存了一个10
在这里插入图片描述
在这里插入图片描述
在打开内存窗口后,要在地址栏输⼊:arr(数组的首元素表示地址),&num,&c,这类地址,就能观察到该地址处的数据。

当然vs中在调式条件下还有许多窗口等,可以自行研究研究

4.编程常见错误归类

4.1编译型错误

编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的,双击错误信息也能初步的跳转到代码错误的地⽅或者附近。
在这里插入图片描述

4.2链接型错误

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。
⼀般是因为以下原因:
1.标识符名不存在
2.拼写错误
3.头⽂件没包含
4.引用的库不存在
在这里插入图片描述

4.3运行时错误

运行时错误是多种多样的,当遇到这种问题时,我们首先可以读一读代码,找找可能出错的位置,再在这些地方进行调式,逐步排查并且找出错误。

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

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

相关文章

开源应用:AI监测如何成为社会安全的智能盾牌

社会背景 随着社会的快速发展,社会安全管理正站在一个新时代的门槛上。社会对安全管理的需求不断增长,传统的安全措施已难以满足现代社会的需求。AI技术以其独特的数据处理和模式识别能力,正在成为我们社会安全的智能盾牌。 AI大模型识别功能…

【牛客】2024暑期牛客多校6 补题记录

文章目录 A - Cake(树上dp)B - Cake 2(暴力)D - Puzzle: Wagiri(tarjan)F - Challenge NPC 2(构造)H - Genshin Impacts Fault(签到)I - Intersecting Interv…

利用扩散模型DDPM生成高分辨率图像|(一)DDPM模型构建

利用扩散模型DDPM生成高分辨率图像(生成高保真图像项目实践) Mindspore框架利用扩散模型DDPM生成高分辨率图像|(一)关于denoising diffusion probabilistic model (DDPM)模型 Mindspore框架利用扩散模型DD…

数字音频工作站(DAW)FL Studio 24.1.1.4239中文破解版

FL Studio 24.1.1.4239中文破解版是一款功能强大的数字音频工作站(DAW),它广泛应用于音乐创作和音乐制作领域。FL Studio是由比利时软件公司Image-Line开发的音乐制作软件,它拥有丰富的音效、合成器、采样器、鼓机等工具。FL Stud…

stm32cubemx+ADC的多通道轮询数据采集和DMA数据采集实现,亲测可用

ADC是单片机的重要组成,也是存在一定的难点。 一、多通道轮询数据采集。 1、配置时钟,用的无源晶振。 2、SW烧写方式 添加USART 3、ADC选择了四个通道 其中两个是采集电压,另外两个是采集芯片内部温度和参考电压。 4、配置采集模式 这里是…

萌啦数据官网丨萌啦ozon数据分析工具官网

在当今这个数据驱动的时代,电子商务的蓬勃发展离不开精准的数据分析与洞察。对于在OZON平台上耕耘的商家而言,掌握市场趋势、优化产品布局、提升运营效率成为了赢得竞争的关键。正是在这样的背景下,萌啦数据官网应运而生,作为一款…

信用卡使用雷区大揭秘:为何你贷款被拒?

​好多朋友明明条件挺好,但申请银行贷款时却吃了闭门羹,一查征信,原来是信用卡使用上栽了跟头。信用卡可是个关键角色,用得好助力贷款,用得不好,直接拖后腿。今天咱们就聊聊信用卡对贷款申请的影响情况和解…

鸿蒙OS ArkTS 省市县级联选择框,封装组件

背景: 公司现在要开发纯血鸿蒙版本APP,我被抽调过来做点功能。现在要做一个省市县级联选择框,并且要封装为组件,供其他页面模块使用。 效果图: 难点: 1. 现在官方文档上只是查到了TextPicker组件是可以做…

建筑设计遇上这几个工具,就是锦上添花!

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2161.html 当AI遇上建筑,设计界的火花就这样擦出来了!👀 身为一名内外饰设计工程师,你是否也在担心作品不经意间借鉴过了头…

Tomcat启动控制台乱码解决方案

前言 事情的起因是这样的,当时我用了阿里云osssdk里的代码下载文件,如下 ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName)); ,开始一切顺利,直到部署正式环境后,用了一段时间…

【Material-UI】Button 组件中的尺寸设置(Sizes)详解

文章目录 一、基础尺寸选项1. 小尺寸(Small)2. 中等尺寸(Medium)3. 大尺寸(Large) 二、尺寸的应用场景三、高级用法和最佳实践1. 使用主题调整默认尺寸2. 确保一致性3. 考虑无障碍设计 四、总结 在用户界面…

代码随想录算法训练营第五十二天|101.孤岛的总面积 、102.沉没孤岛 、103.水流问题 、104.建造最大岛屿

101. 孤岛的总面积 DFS搜索: dfs 函数是一个递归函数,用于深度优先搜索(DFS)遍历网格中的陆地区域。它将访问过的陆地标记为0,并统计陆地的数量。 我们首先定义了四个方向的移动偏移量 dir。 global count 语句用于声…

C++入门2

函数重载 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题 比如下面的 int add(int x…

数据结构和算法|递归算法那些事(递归算法的时间复杂度、尾递归优化、斐波那契数列)

对于文章的第一部分,递归算法的时间复杂度,来自于代码随想录文章:通过一道面试题目,讲一讲递归算法的时间复杂度! 对于第二节尾递归优化来自于B站:尾递归优化:你的递归调用是如何被优化的? 文章…

Spring Boot - 通过ApplicationListener实现接口请求的性能监控

文章目录 概述1. ServletRequestHandledEvent事件2. 实现步骤3. 优缺点分析4. 测试与验证小结其他方案1. 自定义拦截器2. 性能监控平台3. 使用Spring Boot Actuator4. APM工具 概述 在Spring框架中,监控接口请求的性能可以通过ServletRequestHandledEvent事件实现。…

【Java日志系列】日志概述

目录 前言 一、日志概述 二、日志文件 1. 调试日志 2. 系统日志 三、日志框架 1. 日志框架的作用 2. 日志框架的价值 3. 市面上流行的日志框架 4. 日志门面和日志实现的区别 总结 前言 在软件开发中,日志记录是一项至关重要的任务。无论是简单的命令行应…

微服务架构-SpringCloud

1.单体应用架构 将项目所有模块(功能)打成jar或者war,然后部署一个进程。 优点: 部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。技术单一:项目不需要复杂的技术栈,往往一套熟悉的技术栈就…

Netty技术全解析:LineBasedFrameDecoder类深度解析

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

【leetcode】杨辉三角(Java语言描述)

杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] …

XIAOJUSURVEY 重磅升级,推出图形化逻辑编排能力

&#x1f389;&#x1f389;&#x1f389;XIAOJUSURVEY 是滴滴开源的企业级问卷系统&#xff0c;现已重磅升级&#xff01;&#xff01;&#xff01; 本次升级基于自研规则引擎&#xff0c;全面支持复杂的问卷逻辑编排&#xff0c;实现了显示逻辑与跳转逻辑的无缝整合。突破了…