VS的调式技巧你真的掌握了吗?

news2024/11/19 11:17:29

目录

什么是bug?

调式是什么?有多重要?

调试是什么?

调试的基本步骤

debug和release的介绍

windows环境调试介绍

1.调试环境的准备

2.学会快捷键

F11 VS F10

F9 & F5

3.调试时查看程序当前信息

查看临时变量的值

查看内存信息

查看调用堆栈

查看汇编信息

查看寄存器信息

4.多多动手,尝试调试,才有进步


大家中秋和国庆快乐哦🆗,真的耍的太开心了,今天我们抽出一点点时间来讲解VS实用调式技巧!使用的是:VS2022

在我们刚开始学习编程的时候,我们可能去模仿其他人的代码。到我们自己去写代码的阶段时候,我们可能20%的时间来写一个项目代码,80%的时间我们都会去调式代码。对于程序员来说,比写程序更加困难的事情一定是找出自己所写程序的错误。所以说学会调试代码是一件很重要的事情。这样我们就有了自己解决问题的能力。

什么是bug?

第一次被发现的导致计算机错误的飞蛾,也就是第一个计算机程序的错误。我们今天最爱说的“bug”的由来。它的意思,和原身一致,真就是“一只臭虫”

 

第一个程序臭虫(Bug)的由来 - 知乎 (zhihu.com)

调式是什么?有多重要?

一名优秀的程序员也是一名出色的侦探。每一次调试都是尝试破案的过程。 

调试是什么?

调试(英语:Debugging/Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。

是否我们在调试过程是以下情形:迷信式调试!!拒绝!!

调试的基本步骤

  • 发现程序错误的存在(发现错误存在一般有三种人程序员自己/测试人员/用户)
  • 以隔离和消除等方式对错误定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试

debug和release的介绍

简单来说,当我们去实现产品项目,需求------→设计和开发-----→测试------→产品验收-----→发布这都是必不可少的。程序员我们在开发使用的是:Debug版本。测试人员站在用户的角度上是使用:Release版本

那二者有什么区别呢?

经过在不同的版本底下,运行程序。我们查看发现Release相较于Debug版本使用的内存空间要少的多!这就是因为Debug有调试信息且没有任何的优化。

windows环境调试介绍

1.调试环境的准备

2.学会快捷键

简单介绍几个常用的快捷键:

  • F5:  启动调试,经常用来直接调到下一个断点处。
  • F9:  创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。这样就可以使           得程序在想要的位置随意停止执行,继而一步步执行下去。
  • F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
  • F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部
  • CTRL+F5:开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。
  • 以上都是必须掌握的,如果没有效果在你的电脑上,请配合Fn使用!

!想了解更多的快捷键:VS中常用的快捷键_vs快捷键-CSDN博客 

F11 VS F10

简单来说,F11和F10的差别就是。F11会据语句执行,也就会调试函数内部。 F10会把函数当成一个过程去执行,一步执行到位。

F11------->进入test( )函数内部 ------->打印hehe----->出来test( )函数

 

F10------>test( )函数过程执行打印hehe----->执行下一条语句

F9 & F5

F9和F5是配合使用。F9是负责断点的创建核销(遇到循环可以设置条件断点)。(光标放在需要设置断点位置)F5直接来到断点(遇到断点停下),前面全部程序一步到位执行。 

鼠标的光标放在for循环------>F10设置断点成功---->F5直接来到断点(hehe已经再屏幕上打印)

特别注意

 在循环处设置断点,F5会执行循环的次数,例如上面代码会执行10次for循环。

 是程序逻辑上的断点,并不是物理上的断点。

 当然也可以设置多个断点

当循环次数比较多,我们需要跳到某个特定的循环次数时,我们可以设置条件断点 

 

3.调试时查看程序当前信息

开始【调试】后才能在【窗口】中看到这些信息。 

查看临时变量的值

在调试开始之后,用于观察临时变量,局部变量等的值。

当然自动窗口和局部变量都是可以使用的,我们最常用的还是【监视窗口】 

查看内存信息

在调试开始之后,用于观察内存信息。

查看调用堆栈

在调试开始之后,通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置

调用堆栈,反应的是函数的调用逻辑 

查看汇编信息

在调试开始之后,有两种方式转到汇编:

1.右击鼠标,选择【转到反汇编】 2.选择【调试窗口】,选择【转到反汇编】

汇编代码 

查看寄存器信息

调试开始之后,可以查看当前运行环境的寄存器的使用信息。

4.多多动手,尝试调试,才有进步

  • 一定要熟练掌握调试技巧
  • 熟悉编译环境和快捷键的使用,提高写代码和调试的效率
  • 以上所讲都是简单的调试,后面会有复杂的调试场景:多线程程序调试等等
  • 初学者80%可能在写代码,20%迷信调试。但是一个程序员可能20%在写程序,80%在调试。

✔✔✔✔✔最后,感谢大家的阅读,若有错误和不足,欢迎指正!

下篇博文我们介绍一些实例和总结错误。

代码------→【唐棣棣 (TSQXG) - Gitee.com】

联系------→【邮箱:2784139418@qq.com】

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

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

相关文章

LLMs: 近端策略优化PPO Proximal policy optimization

Dr. Ehsan Kamalinejad,通常简称为EK,是一位机器学习应用科学家。他目前是亚马逊NLP开发中的精英科学家。以前,他共同创办了Visual One,一家Y Combinator计算机视觉初创公司。在此之前,他曾担任苹果的首席机器学习工程…

WPS/word 表格跨行如何续表、和表的名称

1:具体操作: 将光标定位在跨页部分的第一行任意位置,按下快捷键ctrlshiftenter,就可以在跨页的表格上方插入空行(在空行可以写,表1-3 xxxx(续)) 在空行中输入…

NUWA论文阅读

论文链接:NUWA: Visual Synthesis Pre-training for Neural visUal World creAtion 文章目录 摘要引言相关工作视觉自回归模型视觉稀疏自注意 方法3D数据表征3D Nearby Self-Attention3D编码器-解码器训练目标 实验实现细节与SOTA比较T2I微调T2V微调V2V微调Sketch-t…

高效的ProtoBuf

一、背景 Google ProtoBuf介绍 这篇文章我们讲了怎么使用ProtoBuf进行序列化,但ProtoBuf怎么做到最高效的,它的数据又是如何压缩的,下面先看一个例子,然后再讲ProtoBuf压缩机制。 二、案例 网上有各种序列化方式性能对比&#…

elment以及elementPlus选中组件出现黑框问题解决!!

目录 问题: 图示: 解决方案: 问题: 使用elementPlus的按钮组件,点击按钮后会出现黑框,除非点击其他地方才能取消掉(之前使用elment-ui其它组件时也出现过) 图示: 解决方案…

2023网络安全工程师可以考哪些证书?只学习不考证怎么行呢?

想入网安行业的小可爱们,如果你在疯狂学习知识技能的同时,也计划着考取一些证书当做入门的金钥匙🔑。 先别急,如果还没有进入网络安全工作岗位,那么,首要任务是打好基础,学好网络安全技术。若是…

docker容器启动成功外部访问不到

1.重启docker服务 systemctl restart docker

9张图深入剖析ConcurrentHashMap

前言 在日常的开发中,我们经常使用key-value键值对的HashMap,其使用哈希表实现,用空间换取时间,提升查询性能 但在多线程的并发场景中,HashMap并不是线程安全的 如果想使用线程安全的,可以使用Concurren…

Swing程序设计(5)绝对布局,流布局

文章目录 前言一、布局管理器二、介绍 1.绝对布局2.流布局总结 前言 Swing窗体中,每一个组件都有大小和具体的位置。而在容器中摆放各种组件时,很难判断其组件的具体位置和大小。即一个完整的界面中,往往有多个组件,那么如何将这…

R函数optim()最小化或者最大化多参数函数

一、optimize()最小化或者最大化单参数函数 1.1函数介绍 函数功能描述:给定一个单参数函数f,需要找到使得f达到其最小值或者最大值的点。 使用optimize()函数最小化单参数函数时,需要指定最小化的函数f及其定义域(x的上界和下界…

Seata 源码篇之AT模式启动流程 - 中 - 03

Seata 源码篇之AT模式启动流程 - 中 - 03 数据源代理会话代理锁定查询执行器本地事务提交本地事务回滚 更新执行器删除执行器插入执行器 小节 本系列文章: Seata 源码篇之核心思想 - 01Seata 源码篇之AT模式启动流程 - 上 - 02 数据源代理 当我们的数据源被代理后&#xff0c…

[C]嵌入式中变量存储方案

#include<stdio.h>#define uint8_t unsigned char #define uint16_t unsigned short #define uint24_t unsigned int #define uint32_t unsigned int #define uint64_t unsigned long long//用户自定义变量名字&#xff0c;用于存储 typedef enum {first_run 0,//…

Linux: tcpdump抓包示例

文章目录 1. 前言2. TCP 状态机3. tcpdump 抓包示例3.1 抓连接握手包&#xff1a;三次握手3.2 抓数据包示例3.3 抓终结连接&#xff1a;四次挥手 4. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任…

【面试HOT100】哈希双指针滑动窗口

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于LeetCodeHot100进行的&#xff0c;每个知识点的修正和深入主要参考…

创建vue3工程

一、新建工程目录E:\vue\projectCode\npm-demo用Visual Studio Code 打开目录 二、点击新建文件夹按钮&#xff0c;新建vue3-01-core文件夹 三、右键vue3-01-core文件夹点击在集成终端中打开 四、初始化项目&#xff0c;输入npm init 一直敲回车直到创建成功如下图 npm init 五…

The directory ‘*‘ or its parent directory is not owned by the current user

python安装编译时出现如下错误 The directory /home/admin/.cache/pip/http or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may …

【办公软件】案例:电路中计算出的电阻值为5欧,怎么通过Excel匹配到仓库里最接近的电阻值?

在实际工作中&#xff0c;比如我们计算出一个电阻值为46欧&#xff0c;那么我们的库里到底是有哪个电阻值最接近呢&#xff1f;可能有一些有经验的工程师会说当然是47欧呀。 但是如果我们计算出来的是80.2欧呢&#xff1f;是不是得去查一下表格看看到底哪个最接近&#xff0c;…

PyTorch入门之【tensor】

目录 tensor的创建tensor的相关信息tensor的运算 tensor的创建 1.手动创建 import torch test1torch.tensor([1,2,3])#一维时为向量 test2torch.tensor([[1,2,3]])#二维时为矩阵 test3torch.tensor([[[1,2,3]]])#三维及以上统称为tensor print(test1) print(test2) print(tes…

C++ 类和对象篇(四) 构造函数

目录 一、概念 1. 构造函数是什么&#xff1f; 2. 为什么C要引入构造函数&#xff1f; 3. 怎么用构造函数&#xff1f; 3.1 创建构造函数 3.2 调用构造函数 二、构造函数的特性 三、构造函数对成员变量初始化 0. 对构造函数和成员变量分类 1. 带参构造函数对成员变量初始化 2. …

云存储解决方案-阿里云OSS

1. 阿里云OSS简介 阿里云对象存储服务&#xff08;Object Storage Service&#xff0c;简称OSS&#xff09;为用户提供基于网络的数据存取服务。使用OSS&#xff0c;用户可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。 阿里云OSS将数据…