VS的调试技巧

news2024/11/20 7:19:20

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.coloradmin.cn/o/945745.html

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

相关文章

【爬虫GUI】YouTube评论采集软件,突破反爬,可无限爬取!

文章目录 一、背景介绍1.1 软件说明1.2 效果演示 二、科普知识2.1 关于视频id2.2 关于评论时间 三、爬虫代码3.1 界面模块3.2 爬虫模块3.3 日志模块 四、获取源码及软件 一、背景介绍 你好,我是马哥python说 ,一名10年程序猿。 最近我用python开发了一…

基于蜜獾算法优化的BP神经网络(预测应用) - 附代码

基于蜜獾算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于蜜獾算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.蜜獾优化BP神经网络2.1 BP神经网络参数设置2.2 蜜獾算法应用 4.测试结果:5.Matlab代码 摘要…

融合正余弦和柯西变异的麻雀搜索算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【数据结构】排序(插入、选择、交换、归并) -- 详解

一、排序的概念及其运用 1、排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记…

APP弱网测试

测试用例 在弱网的条件下 页面的响应正常页面展示的数据无误页面的一致性无误(图片展示、排版预期一致、数据展示无误)是否会出现ANR、Crash 在网络切换的情况下 页面交互无误无奔溃、显示错乱客户端服务端数据一致性展示无误请求堆积的出路无误 在无网…

谈谈智能安防领域

目录 1.什么是智能安防 2.智能安防的发展过程 3.智能安防涉及到的知识 4.智能安防给人类带来的福利 1.什么是智能安防 智能安防是基于人工智能技术的安全防护系统,旨在通过智能化的方法保护人员和财产的安全。它利用传感器、摄像头、算法等技术,通过识…

前端面试必备 | uni-app 篇(P1-15)

文章目录 1. 请简述一下uni-app的定义和特点。2. uni-app兼容哪些前端框架?请列举几个。3. 请简述一下uni-app的跨平台工作原理。4. 什么是条件编译?在uni-app中如何实现条件编译?5. uni-app中的页面生命周期有哪些?请简要介绍。6…

【卷积神经网络】MNIST 手写体识别

LeNet-5 是经典卷积神经网络之一,1998 年由 Yann LeCun 等人在论文 《Gradient-Based Learning Applied to Document Recognition》中提出。LeNet-5 网络使用了卷积层、池化层和全连接层,实现可以应用于手写体识别的卷积神经网络。TensorFlow 内置了 MNI…

网络基础知识socket编程

目录 网络通信概述网络互连模型:OSI 七层模型TCP/IP 四层/五层模型数据的封装与拆封 IP 地址IP 地址的编址方式IP 地址的分类特殊的IP 地址如何判断2 个IP 地址是否在同一个网段内 TCP/IP 协议TCP 协议TCP 协议的特性TCP 报文格式建立TCP 连接:三次握手关…

vue2 支持图片放大

添加 :preview-src-list属性 <el-imagev-for"item in specialData.urls":src"item":key"item.index":preview-src-list[item]class"pictrue"/>

李跳跳apk

李跳跳下载&#xff0c;密码 65c9

【VRRP】虚拟路由冗余协议

什么是VRRP&#xff1f; 虚拟路由冗余协议VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于提高网络可靠性的容错协议。通过VRRP&#xff0c;可以在主机的下一跳设备出现故障时&#xff0c;及时将业务切换到备份设备&#xff0c;从而保障网络通信的…

【桌面小屏幕项目】ESP32开发环境搭建

视频教程链接&#xff1a; 【【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022】 https://www.bilibili.com/video/BV1wV4y1G7Vk/?share_sourcecopy_web&vd_source4fa5fad39452b08a8f4aa46532e890a7 一、esp…

C++标准库STL容器详解

目录 C标准模板库STL容器容器分类容器通用接口 顺序容器vectorlistdeque 容器适配器queuestackpriority_queue 关联容器&#xff1a;红黑树setmultisetmapmultimap 关联容器&#xff1a;哈希表unordered_set和unordered_multisetunordered_map和unordered_multimap 附1&#xf…

机械硬盘HDD的基础知识介绍

机械硬盘在价格&#xff0c;容量&#xff0c;磨损度上面都只有着SSD不可取代的地方&#xff0c;目前世界上80%的数据仍然存储在HDD上&#xff0c;不过随着科技的进步&#xff0c;以及SSD技术不断的突破和逐渐降低的价格&#xff0c;HDD的占比会越来越低,至于未来会不会被SSD完全…

任务执行和调度----Spring线程池/Quartz

定时任务 在服务器中可能会有定时任务&#xff0c;但是不知道分布式系统下次会访问哪一个服务器&#xff0c;所以服务器中的任务就是相同的&#xff0c;这样会导致浪费。使用Quartz可以解决这个问题。 JDK线程池 RunWith(SpringRunner.class) SpringBootTest ContextConfi…

Redis的五大数据类型的数据结构

概述 Redis底层有六种数据类型包括&#xff1a;简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。这六种数据结构五大数据类型关系如下&#xff1a; String&#xff1a;简单动态字符串List&#xff1a;双向链表、压缩列表Hash&#xff1a;压缩列表、哈希表Sorted…

指针(个人学习笔记黑马学习)

1、指针的定义和使用 #include <iostream> using namespace std;int main() {int a 10;int* p;p &a;cout << "a的地址为&#xff1a;" << &a << endl;cout << "a的地址为&#xff1a;" << p << endl;…

CPU和GPU的区别

介绍什么是GPU, 那就要从CPU和GPU的比较不同中能更好更快的学习到什么是GPU CPU和GPU的总体区别 CPU&#xff1a; 叫做中央处理器&#xff08;central processing unit&#xff09; 可以形象的理解为有25%的ALU(运算单元)、有25%的Control(控制单元)、50%的Cache(缓存单元)…

“短视频类”App个人信息收集情况测试报告

近期&#xff0c;中国网络空间安全协会对“短视频类”公众大量使用的部分App收集个人信息情况进行了测试。测试情况及结果如下&#xff1a; 一、测试对象 本次测试选取了19家应用商店⁽⁾累计下载量达到1亿次的“短视频类”App&#xff0c;共计6款&#xff0c;其基本情况如表…