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

目录

什么是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.xdnf.cn/news/149154.html

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

相关文章

【物联网】STM32的中断机制不清楚?看这篇文章就足够了

在嵌入式系统中,中断是一种重要的机制,用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器,可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…

<学习笔记>从零开始自学Python-之-常用库篇(十二)Matplotlib

Matplotlib 是Python中类似 MATLAB的绘图工具,Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建2D图表和一些基本的3D图表,可根据数据集(DataFrame,Series)自行定义x,y轴,绘制图…

IntelliJ IDEA配置Cplex12.6.3详细步骤

Cplex12.6.3版IntelliJ IDEA配置详细步骤 一、Cplex12.6.3版下载地址二、Cplex安装步骤三、IDEA配置CPLEX3.1 添加CPLEX安装目录的cplex.jar包到项目文件中3.2 将CPLEX的x64_win64文件夹添加到IDEA的VM options中 四、检查IDEA中Cplex是否安装成功卸载Cplex 一、Cplex12.6.3版下…

Docker通过Dockerfile创建Redis、Nginx--详细过程

创建Nginx镜像 我们先创建一个目录,在目录里创建Dockerfile [rootdocker-3 ~]# mkdir mynginx [rootdocker-3 ~]# cd mynginx [rootdocker-3 ~]# vim Dockerfile Dockerfile的内容 FROM daocloud.io/library/centos:7 RUN buildDepsreadline-devel pcre-devel o…

代码:对鱼眼相机图像进行去畸变处理

图像投影模型:针孔[fx, fy, cx, cy] 图像畸变模型:切向径向畸变[k1, k2, p1, p2] 说明:用于备忘 第一部分是常规的去畸变操作,在已知内参的情况下对鱼眼相机进行去畸变,这里使用的是remap映射在对图像去畸变后&#x…

竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

Windows下启动freeRDP并自适应远端桌面大小

几个二进制文件 xfreerdp # Linux下的,an X11 Remote Desktop Protocol (RDP) client which is part of the FreeRDP project wfreerdp.exe # Windows下的,freerdp2.0 主程序,freerdp3.0将废弃 sdl-freerdp.exe # Windows下的&…

appscan的两种手动探索扫描方式

文章目录 一、使用火狐FoxyProxy浏览器代理探索二、使用appscan内置浏览器探索 一、使用火狐FoxyProxy浏览器代理探索 首先火狐浏览器需安装FoxyProxy 先在扩展和主题里搜FoxyProxy 选FoxyProxy Standard,然后添加到浏览器就行 添加后浏览器右上角会有这个插件 打开apps…

【算法学习】-【双指针】-【快乐数】

LeetCode原题链接:202. 快乐数 下面是题目描述: 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果…

cad图纸如何防止盗图(一个的制造设计型企业如何保护设计图纸文件)

在现代企业中,设计图纸是公司的重要知识产权,关系到公司的核心竞争力。然而,随着技术的发展,员工获取和传播设计图纸的途径越来越多样化,如何有效地防止员工复制设计图纸成为了企业管理的一大挑战。本文将从技术、管理…

【动手学深度学习-Pytorch版】Transformer代码总结

本文是纯纯的撸代码讲解,没有任何Transformer的基础内容~ 是从0榨干Transformer代码系列,借用的是李沐老师上课时讲解的代码。 本文是根据每个模块的实现过程来进行讲解的。如果您想获取关于Transformer具体的实现细节(不含代码)可…

MySQL的复合查询

文章目录 1. 多表查询2. 自连接3. 子查询3.1 单行子查询3.2 多行单列子查询3.3 单行多列子查询3.4 在from子句中使用子查询 4. 合并查询4.1 union all4.2 union 5. 内连接6. 外连接6.1 左外连接6.2 右外连接 1. 多表查询 前面我们讲解的mysql表的查询都是对一张表进行查询&…

哨兵(Sentinel-1、2)数据下载

哨兵(Sentinel-1、2)数据下载 一、登陆欧空局网站 二、检索 先下载2号为光学数据 分为S2A和S2B,产品种类有1C和2A,区别就是2A是做好大气校正的影像,当然数量也会少一些,云量检索条件中记得要按格式&#x…

Mind Map:大语言模型中的知识图谱提示激发思维图10.1+10.2

知识图谱提示激发思维图 摘要介绍相关工作方法第一步:证据图挖掘第二步:证据图聚合第三步:LLM Mind Map推理 实验实验设置医学问答长对话问题使用KG的部分知识生成深入分析 总结 摘要 LLM通常在吸收新知识的能力、generation of hallucinati…

一键AI高清换脸——基于InsightFace、CodeFormer实现高清换脸与验证换脸后效果能否通过人脸比对、人脸识别算法

前言 1、项目简介 AI换脸是指利用基于深度学习和计算机视觉来替换或合成图像或视频中的人脸。可以将一个人的脸替换为另一个人的脸,或者将一个人的表情合成到另一个人的照片或视频中。算法常常被用在娱乐目上,例如在社交媒体上创建有趣的照片或视频,也有用于电影制作、特效…

Qt model/view 理解01

在 Qt 中对数据处理主要有两种方式:1)直接对包含数据的的数据项 item 进行操作,这种方法简单、易操作,现实方式单一的缺点,特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作,如果现实方式改…

44 二叉搜索树中第K个小的元素

二叉搜索树中第K个小的元素 题解1 中序遍历题解2 AVL(手撕平衡二叉树:谢谢力扣官方) 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数&#xf…

再来介绍另一个binlog文件解析的第三方工具my2sql

看腻了文字就来听听视频演示吧:https://www.bilibili.com/video/BV1rp4y1w74B/ github项目:https://github.com/liuhr/my2sql gitee链接:https://gitee.com/mirrors/my2sql my2sql go版MySQL binlog解析工具,通过解析MySQL bin…

Maven 中引用其他项目jar包出现BOOT-INF问题

问题 在B项目中引入A项目的类,但是发现怎么也引入不进来 A项目打包之后,想在B项目中引用jar 在B项目中发现类文件无法引用 参考网上进行清缓存等一系列操作都没有解决。 最后发现引用的jar包中包含BOOT-INF, 然后去A项目中查找&#xff…

基于回溯搜索优化的BP神经网络(分类应用) - 附代码

基于回溯搜索优化的BP神经网络(分类应用) - 附代码 文章目录 基于回溯搜索优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.回溯搜索优化BP神经网络3.1 BP神经网络参数设置3.2 回溯搜索算法应用 4.测试结果…