VS的调试技巧

Visual Studioicon-default.png?t=N7T8https://visualstudio.microsoft.com/zh-hans/vs/

目录

 1、什么是调试?

2、debug和release

3、调试

3.1、环境

3.2、 快捷键

3.2.1、F10和F11

3.2.2、ctrl+F5

3.2.3、F5与F9

 3.2.3.1、条件断点

3.3、监视和内存观察

3.3.1、监视

3.3.2、内存


1、什么是调试?

当我们发现程序中存在的问题的时候,那下⼀步就是找到问题,并修复问题。 这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。


调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调 试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码, 重新测试。

 

 

2、debug和release

  • Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序; 程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为debug,这样编译产⽣的是debug 版本的可执⾏程序,其中包含调试信息,是可以直接调试的。
  • Release 称为发布版本,它往往是进⾏了各种优化,使得程序在代码⼤⼩和运⾏速度上都是最优的, 以便⽤⼾很好地使⽤。当程序员写完代码,测试再对程序进⾏测试,直到程序员的质量符合交付给⽤ ⼾使⽤的标准,这个时候就会设置为release,编译产⽣的就是release版本的可执⾏程序,这个版本是 ⽤⼾使⽤的,⽆需包含调试信息等。 

简单来说,Debug版本是程序员使用的版本,进行调试和修复,而Release版本是当程序员写完代码,并且代码符合质量标准后,进行上交的版本,也就是最后用户使用的版本,同时Release版本是无法进行调试和修改的。 

 

且二者的最大不同之处就在于存储在电脑磁盘中的内存空间并不一致,Release存储的更小,而Debug存储的更大。 

3、调试

3.1、环境

调试的环境,在调试代码之前,必须先进行环境的改变,也就是先将编译器的变为debug的版本环境,而X86和X64环境并无大碍。

3.2、 快捷键

VS中常用的快捷键:http://t.csdn.cn/Gjfmi

3.2.1、F10和F11

介绍:

  • F10:逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调⽤,或者是⼀条语句。
  • F11:逐语句,就是每次都执⾏⼀条语句,但是这个快捷键可以使我们的执⾏逻辑进⼊函数内部。 

区别:

 

如以上代码:

  • 若使用F10进行调试,根据F10的调试原理,在调试到调用函数test()时,F10会直接越过,并得出结果,随后立即跳往下一个语句,for()
  • 而,若使用F11进行调试,根据F11的调试原理,在调试到调用函数test()时,F11会进入test中,通过调用函数,抵达void test()并开始调试里面的每一个语句,待调试完里面的所有语句后,在跳回原来的test()之后的语句。 

结论:在函数调⽤的地⽅,想进⼊函数观察细节,必须使⽤F11,如果使⽤F10,直接完成函数调⽤。 

3.2.2、ctrl+F5

ctrl+F5 开始执⾏不调试,如果你想让程序直接运⾏起来⽽不调试就可以直接使⽤。

3.2.3、F5与F9

介绍:

  • F5:启动调试,经常⽤来直接跳到下⼀个断点处,⼀般是 和F9配合使⽤。
  • F9:创建断点和取消断点 断点的作⽤是可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂定执 ⾏,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执行细节。 

注意:

F5在没有配合F9的使用时,就和Ctrl+F5毫无区别(最新的VS2020版本),甚至是一闪而过。 

 作用:

F9的是用于在有可能出现问题的地方使用,配合F5,可以使调试变得更加的简便和轻松。

譬如:

如以上代码:

在得知错误点在for语句时

  • 若在for循环开始的那一行中摁下F9,设置断点,而后在摁下F5,那么在for之前的代码语句将会快速进行调试,随后抵达F9的所在位置。
  • 而若没有使用该功能,我们想要查询for语句中的错误,只能使用F10或者F11进行逐行的代码调试,效率极其低下。 

 3.2.3.1、条件断点

条件断点:满⾜这个条件,才触发断点

 

在进行条件断点之前,我们先了解一下断点。

如以上代码,有两个断点,分别是第18行和第23行。

那么在18行的断点结束后,摁下F5,跳往的是第23行的断点,还是?

 答案并不是第23行的断点,而是下一处循环的断点。

for语句,是一个循环语句,在循环未结束之前,是不会停下,而设在for语句循环体内的断点也是如此,当一次循环的断点结束后,摁下F5飞往的是下一次循环的断点,直到循环结束!

这也是断点的一个特点,断点是逻辑断点,并非物理表面上的物理断点! 

条件断点:


 如以上代码,有这样一个疑问,如果我知道了某一次循环会出错,但是我要知道那一次循环具体出错的原因,那么我该怎么办?应该是在循环语句中不断的使用F11进行内部循环的调试,调试到那一次循环位置,还是说?

于是乎,当我们遇到这类问题时,我们就可以将断点设置为条件断点进行调试。

条件断点的原理是只有满足改条件时,循环便会中断,且之前进行的循环过程会被快速调试。 

如何设置:

摁F9设置断点——>右击断点——>选择“条件”——>设置条件——>回车 

3.3、监视和内存观察

在调试的过程中我们,如果要观察代码执⾏过程中,上下⽂环境中的变量的值,有哪些⽅法呢?

3.3.1、监视

开始调试后,在菜单栏中【调试】->【窗⼝】->【监视】,打开任意⼀个监视窗⼝,输⼊想要观察的对 象就行。

打开监视窗口:

 注意:只有在进行调试后(摁下F10),才能点击窗口右侧选项栏内的监视,否则会没有任何东西出现。

 且,在监视栏中,输入的对象必须是合法对象,也就是在代码中合理的表达式或者变量,否则会没有任何东西出现。

3.3.2、内存

 如果监视窗⼝看的不够仔细,也是可以观察变量在内存中的存储情况,还是在【调试】——>【窗⼝】——> 【内存】

打开内存窗口:

在内存窗⼝中观察数据: 

 

第一行表示内存地址,第二行表示内存中的十六进制展示,第三行表示内存数据的解析。

 

在打开内存窗⼝后,要在地址栏输⼊:arr,&num,&c,这类地址,就能观察到该地址处的数据。 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS中如何实现元素之间的间距(Margin)合并效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 外边距合并的示例:⭐ 如何控制外边距合并:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff…

Redis 列表 | Navicat

在最近的博客 文章 中,我们已经了解了 Redis 的六种数据类型。其中,Redis 列表(List)包含一组字符串,他们按照被添加的顺序进行排序。本文将就列表数据类型进行展开介绍,并且重点介绍一些主要的命令来管理它…

探索Python的魔法世界,开启编程奇幻之旅!

无需魔杖,只需键盘,Python将带你进入一个充满奇幻和创造力的世界。本篇博客将引领你走进Python的魔法大门,从编程新手蜕变为编码魔法师,开启一段激动人心的编程奇幻之旅。 🍀引言 如果你是一名编程初学者,并…

精准运营,智能决策!解锁天翼物联水利水务感知云

面向智慧水利/水务数字化转型需求,天翼物联基于感知云平台创新能力,提供涵盖水利水务泛协议接入、感知云水利/水务平台、水利/水务感知数据治理、数据看板在内的水利水务感知云服务,构建水利水务感知神经系统新型数字化底座,实现智…

【ArcGIS Pro二次开发】(63):批量更改字段别名

在我工作中遇到的大多数图斑,字段名称一般是英文,字段别名是中文,使用起来是比较方便的。 但有时候也会遇到一些不一样的情况,不知是经过了怎样的处理,图斑的字段别名被修改成了和字段名称一样的英文,这样…

Visual Studio 2022的MFC框架——AfxWinMain全局对象和InitInstance函数

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 在看这篇帖子前,请先看我的另一篇帖子《Visual Studio 2022的MFC框架——应用程序向导》。 当程序调用了CWinApp类的构造…

度矩阵、邻接矩阵

度矩阵(degree matrix) 度矩阵是对角阵,对角上的元素为各个顶点的度,顶点vi的度表示和该顶点相关联的变得数量。 在无向图中,顶点vi的度d(vi)N(i)(即与顶点相连的边的数目)有向图中&#xff0…

PHP8函数的引用和取消-PHP8知识详解

今天分享的是php8函数的引用和取消,不过在PHP官方的参考手册中,已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数,都可以直接简单的通过函数名调佣。函数的引用大致有下面3种: 1.1、如果是PHP的内置函…

mysql sql_mode数据验证检查

sql_mode 功能 sql_mode 会影响MySQL支持的sql语法以及执行的数据验证检查。通过设置sql_mode ,可以完成不同严格程度的数据校验,有效地保障数据准确性 sql_mode 严格模式 VS 宽松模式 宽松模式 比如,插入的数据不满足 表的数据类型,也可能…

Vulnhub: Ragnar Lothbrok: 1靶机

kali:192.168.111.111 靶机:192.168.111.226 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.226 作者提示修改hosts文件 目录爆破 gobuster dir -u http://armbjorn -w /usr/share/wordlists/dirbuster/directory-l…

【FreeRTOS】【应用篇】任务管理相关函数

文章目录 前言一、函数解析1. 任务挂起 vTaskSuspend()① 使用场景② 设计思路③ 代码 2. 任务恢复 vTaskResume()① 作用② 设计思路③ 代码 3. 挂起任务调度器 vTaskSuspendAll()① 作用② 代码 4. 恢复任务调度器 xTaskResumeAll()① 设计思路② 代码 5. 任务删除函数 vTask…

Servlet的使用(JavaEE初阶系列17)

目录 前言: 1.Servlet API的使用 1.1HttpServlet 1.2HttpServletRequest 1.3HttpServletResponse 2.表白墙的更新 2.1表白墙存在的问题 2.2前后端交互接口 2.3环境准备 2.4代码的编写 2.5数据的持久化 2.5.1引入JDBC依赖 2.5.2创建数据库 2.5.3编写数…

ELK高级搜索(二)

文章目录 7.Java api 文档管理7.1 es技术特点7.2 获取数据7.3 文档查询7.4 文档新增7.5 文档修改7.6 文档删除7.7 文档bulk 8.图解es内部机制8.1 es分布式基础8.2 分片shard、副本replica8.3 单node环境创建index8.4 多node环境replica shard8.5 横向扩容…

Quartus II安装下载驱动

Quartus II安装下载驱动 安装步骤: (1)安装完quartus后会自带USB-Blaster的驱动程序,因此不用再去网上下载。 (2)右键点脑左下角win,找到设备管理器并进入。 (3)找到…

Python爬虫 异步、缓存技巧

在进行大规模数据抓取时,Python爬虫的速度和效率是至关重要的。本文将介绍如何通过异步请求、缓存和代理池等技巧来优化Python爬虫的速度和性能。我们提供了实用的方案和代码示例,帮助你加速数据抓取过程,提高爬虫的效率。 使用异步请求、缓…

多店铺智能客服,助力店铺销量倍增

近年来电商发展得非常快速,市场竞争也是愈发激烈了。商家不仅需要提高产品和服务的质量,还要争取为自己获取更多的曝光,以此来分散运营的风险和降低经营的成本,所以越来越多的商家也开始转向多平台多店铺运营。但即使运营多个平台…

Python-pyqt不同窗口数据传输【使用静态函数】

文章目录 前言程序1:caogao1.py输入数据界面程序2:caogao2.py接收数据界面 程序3 :将输入数据界面和接收数据界面组合成一个总界面讲解 总结 前言 在编写pyqt 页面时有时候需要不同页面进行数据传输。本文讲解静态函数方法。直接看示例。 程…

AntDesign 自定义图片上传前端压缩画质

为什么压缩图片? 应为现在公司没有使用云数据库 从而为了减少服务器的消耗需要将用户上传的图片压缩 前端压缩图片的技术选择! 查阅资料发现当下两种压缩的方法!!第一种使用工具库实现 npm install image-conversion --save 第…

【Linux】序列化与反序列化

目录 前言 什么是应用层? 再谈"协议" 什么是序列化和反序列化 网络版计算器 整体流程实现 Sock.hpp的实现 TcpServer.hpp的实现 Protocol.hpp的实现 CalServer.cc的编写 CalClient.cc的编写 整体代码 前言 本章是属于TCP/UDP四层模型中的第一层…

【NCRE 二级Java语言程序设计01】全国计算机等级考试初识

目录 前言一、简单认识全国计算机等级考试1.官方介绍2.省级和全国级3.考试内容 二、NCRE正确入口三、官方重要资源分布1.大纲教材2.相关下载3.试题选登4.常见问题 总结 前言 📜 本专栏主要是分享自己备考全国计算机二级所学、所搜集的资料。虽然有 Java 相关基础&am…