[visual studio]中,关于如何 【调试】 的问题 及 技巧

news2024/11/25 5:47:54

我们都知道,不会调试的程序员不是一个合格的程序员

在初学阶段,由于对于语法的不熟悉,我们可能会写出很多语法错误,无法通过编译,编译器会报错,这种错误很好修改。

但是,随着我们不断敲代码,对语法逐渐熟悉,那么我们写出的语法错误就会越来越少,bug可能就不太容易发现。

如果代码量较大,那么需要找出并修正bug,是一个比较麻烦的过程。

那么,为了不让我们在编程这条路上,从入门到放弃学会调试,就很重要了。

一.调试是什么

1.什么是调试

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

2.调试的基本步骤

  1. 发现程序错误的存在
  2. 以隔离、消除等方式对错误进行定位
  3. 确定错误产生的原因
  4. 提出纠正错误的解决办法
  5. 对程序错误予以改正,重新测试

3.Debug 和 Release 

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优
的,以便用户很好地使用。

Debug和Release就在这里 ↓ 进行切换。

238ac71b8a474e308d97b654b1224d4b.png
 

 二.如何调试

注意:在环境中选择 debug 选项,才能使代码正常调试。

1.常用快捷键

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

2.调试的时候查看程序当前信息

1.查看临时变量的值
 

在调试开始之后,用于观察变量的值。

我们需要先按 Ctrl+F10  进入调试。(注意,如果不先按 Ctrl+F10,是不会出现下面的窗口的。)

然后点击【调试】 ,点到【窗口】,点到【监视】,会出现监视1,监视2,监视3,监视4。这里随便选择一个即可。

fcb5573c2d5141c9bc2d08ef91345bd7.png
 

 之后,就能看到监视窗口了。

我们可以添加我们需要监视的项。

fc392755f048452b8decede4f479c78e.png

 然后就可以按我们的F11进行逐语句执行。(也可以使用上面提到的其它快捷键)

62324a44bffc45619d3e8da48e8419df.png

这样我们就可以通过调试来发现是哪里出了问题,到底是逻辑出了问题还是其它的一些问题。 


2.查看内存信息
 

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

和监视窗口一样,也是点到【调试】,然后【内存】,然后在内存1,内存2,内存3,内存4里任选一个。
10ed69735e1e45bd81ad6d4adfd8f119.png

 ab088f4cb4a04ab9a394d4586a25d0d4.png

3.查看调用堆栈

 

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

fee01e6855d54479999fd3076fba2aa4.png

 4.查看汇编信息、寄存器

反汇编:可以切换到汇编代码

寄存器:可以查看当前运行环境的寄存器的使用信息

53a204b4930048f0bba9157ec670403d.png

 三.一个小知识

在调试过程中,我们可能会出现这样的情况:我们多按了一次F11,需要回到上一条语句。

那么,我们可不可以把小黄箭头往上拖一行呢?

可以是可以,只不过,变量不会变成上一行的状态了。

也就是说,执行了上一条语句,产生的结果不会被改变,哪怕你把小黄箭头往上拖了一行,表面上看确实是回退了一步,但也仅仅只是表面上。

覆水难收,破镜难圆。

但是它也不是一无是处,在上一条语句没什么影响的情况下,往回拖也是可以的。

但是,通常来说,这种情况的解决办法就是:重新调试

 

四.最后,多多动手

正如本文一开始所说,不会调试的程序员不是好程序员。

所以,我们一定要多去调试,在调试中不断进步,祝你我代码能力越调越强,在编程这条路上,一路高歌。

 

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

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

相关文章

当面试官问“你的SQL能力怎么样”时,怎么回答才不会掉进应聘陷阱?

在某平台看到一个比较实际的问题,在这里分享给职场新人。 SQL已经是职场最常用的一种编程语言,所以应聘技术或非技术岗位,都可能会被问道一个问题:你的SQL能力怎么样? 对于职场新人来说(SQL高手可以无视下…

JavaScript事件循环

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库一、异步执行原理1. 单线程的JavaScript我们知道,JavaScript是一种单线程语言,它主要用来与用户互动,以及操…

50-Jenkins-Lockable Resources插件实现资源锁定

Lockable Resources插件实现资源锁定前言安装插件使用插件资源配置Pipeline中使用前言 用来阻止多个构建在同一时间试图使用同一个资源。这里的资源可能是一个节点、一个代理节点、一组节点或代理节点的集合,或者仅仅是一个用于上锁的名字。如果指定的资源没有在全…

ASP.NET MVC | 创建应用程序

目录 首先 NO.1 No.2 App_Data 文件夹 Content 文件夹 Controllers 文件夹 Models 文件夹 Views 文件夹 Scripts 文件夹 最后 首先 一步一步的来,电脑上需要安装vs2019软件,版本高低无所谓,就是功能多少而已。 长这样的&#xff0…

无公网IP如何外网异地登录访问电商进销存系统?

电商进销存系统软件是电商企业必备的重要软件之一。 集订单管理、货品管理、采购管理等功能于一体,主要帮助广大电商用户实现准确、高效的订单处理及精细化的仓储管理。 电商进销存系统软件一般采用B/S结构,用户可在异地访问系统、查看货品库存及管理订…

第五期(2022-2023)传统行业云原生技术落地调研——金融篇 现已开启

随着数字化浪潮的来临,云原生技术正在改变着各行各业,通过IT变革驱动业务创新发展,促进企业自身以及产业生态的转型升级。 因此,灵雀云联合云原生技术实践联盟(CNBPA)和行业内头部厂商F5,共同发…

小黑子的线性代数:第一章

线代从入门到入土:一小黑子的线代系列:第一章1. 行列式1.1 二阶行列式1.2 三阶行列式1.3 小结2. 全排列与逆序数2.1 全排列2.2 逆序数3. 对换4. n阶行列式的定义5. 余子式和代数余子式6. 行列式的性质6.1 转置行列式6.2 对换变号6.3 提取公因子6.4 行列式…

华为OD机试C++实现 - 最小步骤数

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

GEE:样本点选择教程

本文记录了在GEE平台上标记样本的技巧和代码脚本,样本点可以用来做土地利用分类、植被提取、水藻提取、冰川提取、农作物提取等应用中。可以应用到的方法包括随机森林(RF)分类,支持矢量机(SVM)分类&#xf…

JavaSE之常用关键字学习

文章目录Java常用关键字学习1、static关键字学习1.1 用法一:修饰成员变量1.2 用法二:修饰成员方法1.3 用法三:修饰代码块1.4 用法四:修饰内部类类1.5 单例设计模式2、extends关键字学习2.1 继承的特点2.2 方法重写3、this、super关…

nvm基础命令

nvm基础命令 有了nvm之后就可以进行node下载了。下面举一个简单的例子: nvm version: 查看nvm版本 nvm list:查看本地拥有的node版本 nvm install xxx:安装版本号为xxx的node nvm use xxx:将node版本切换为xxx 以…

微信接口wx.login()、wx.request()中获取的内容不能赋值给全局变量(已解决)

小程序问题总结01 微信接口wx.login()、wx.request()中获取的内容不能赋值给全局变量(已解决) 在写登录模块的时候,需要使用微信的wx.login()接口获取临时code,并利用临时code向开发者服务器端发送请求,然后获取open…

自动化测试优势和劣势

一、自动化测试概述 软件自动化测试是相对手工测试而存在的,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,节省人力、时间或硬件资源,提高测试效率。 二、自动化测试优势&劣…

和日期相关的代码和bug——一道力扣题中的小发现

目录 Day of the Week 题目大意 常规方法 Python代码 Golang代码 C代码 基姆拉尔森公式 Python代码 Golang代码 C代码 使用库函数 Python代码 Golang代码 C代码 Day of the Week Given a date, return the corresponding day of the week for that date. The inp…

Photon Vectorized Engine 学习记录

Photon Hash Aggregation Vectorization Photon Hash Join 的向量化的要点是:使用开放地址法。步骤: 向量化计算 hash 值基于 hash 向量化计算 bucket 下标,得到 bucket index 向量基于 bucket index 向量中记录的下标找到 bucket&#xff…

领导催我优化SQL语句,我求助了ChatGPT。这是ChatGPT给出的建议,你们觉得靠谱吗

作为一个程序员,无论在面试还是工作中,优化SQL都是绕不过去的难题。 为啥?工作之后才会明白,随着公司的业务量增多,SQL的执行效率对程系统运行效率的影响逐渐增大,相对于改造代码,优化SQL语句是…

线上插画培训班有用吗,教你选靠谱的插画课程

线上插画培训班有用吗,教你选靠谱的插画课程,推荐5个靠谱的动漫插画培训课程,各有特色和优势,相信可以给大家一些参考! 一:5个靠谱的动漫插画网课 1、轻微课(五颗星) 主打课程有日…

机器学习:基于逻辑回归对某银行客户违约预测分析

机器学习:基于逻辑回归对某银行客户违约预测分析 文章目录机器学习:基于逻辑回归对某银行客户违约预测分析一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.逻辑回归2.业务理解3.读取数据4.数据理解5.数据准备6.逻辑回归模型训练7.模型评…

【第41天】实现一个简单选择排序

本文已收录于专栏🌸《Java入门一百例》🌸学习指引序、专栏前言一、选择排序二、【例题1】1.题目描述2、解题思路3、模板代码三、推荐专栏序、专栏前言 本专栏开启,目的在于帮助大家更好的掌握学习Java,特别是一些Java学习者难以在…

「epoll」深入linux内核中是如何实现多路的IO管理的

进程在 Linux 上是一个开销不小的家伙,先不说创建,光是上下文切换一次就得几个微秒。所以为了高效地对海量用户提供服务,必须要让一个进程能同时处理很多个 tcp 连接才行。现在假设一个进程保持了 10000 条连接,那么如何发现哪条连…