八 、VS的调试技巧

                                                                                                                                     --- 24.4.20

目录

1、什么是Bug?

2、什么是调试(Debug)?

3、Debug和Release

4、VS基础调试快捷键

4.1、环境准备

4.2、调试快捷键

5、监视和内存观察

5.1、监视窗口

5.2、内存窗口

6、调试举例1

7、调试举例2

8、调试举例3

9、编程常见的错误归类

9.1、编译型错误

9.2、链接型错误

9.3、运行时错误


1、什么是Bug?

一般指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞,也叫Bug。

2、什么是调试(Debug)?

当发现程序中存在问题时,下一步就是找到问题并修复问题,这个找问题的过程称为调试,英文叫Debug,是消灭问题的意思。

调试一个程序,首先是承认出现了问题,然后通过各种手段去定位问题的位置,可能是逐过程的调试,也可能是隔离屏幕代码的方式,找到问题所在的位置,然后确定错误产生的原因,再修复代码,重新测试。

3、Debug和Release

Debug通常称为调试版本:它包含调试信息,并且不做任何优化,便于程序员调试程序;用Debug版本写代码,编译产生的是Debug版本的可执行程序,其中包含调试信息,是可以直接调试的。

Release通常称为发布版本:他往往进行了各种优化,使得程序在代码大小和运行速度上都是最优的。当写完代码使其程序质量符合交付于用户使用的标准,这时就会设置为Release版本,这个是给用户使用的。

Debug由于包含了调试信息,所以内存会更大一些。

4、VS基础调试快捷键

在这里我们将学习程序员是如何调试代码的

4.1、环境准备

首先是环境的准备,需要一个支持调试的开发环境,所以应把编译环境设置为Debug版本。

4.2、调试快捷键

F9:创建断点和取消断点。

F5:启动调试,经常用来跳到下一个断点处,一般是和F9配合使用。

F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部。在函数调用的地方,想进入函数观察细节,必须使用F11,如果使用F10,就会直接完成函数的调用。

CTRL+F5:开始执行不调试,如果想让程序直接运行起来而不调试就可以直接使用。

条件断点:在断点处右击鼠标设置断点的条件。

5、监视和内存观察

5.1、监视窗口

①打开监视窗口(F10开始调试后才能使用监视窗口)

5.2、内存窗口

打开内存窗口

这里列太长了不好观察,可以将列设置为4跟方便观察。

在这里解释一下内存窗口:

与以上相似的窗口还有很多,如:自动窗口(自动帮长序员观察一些值,但是用起来不够方便,所以一般用的比较少)、反汇编(把语句转换成汇编代码)、寄存器(暂存数据)。

6、调试举例1

求:1!+ 2!+ ... +10!

在这里我们先用3试一下值是否正确

这里的结果本应该是9,但是实际编译器出现的是15,实际的结果和预期是不相等的,这就是Bug。

下面我们借助调试解决问题:

经过调试后发现每次进行第二个for循环中ret的值都会保留上一次的值进行运算,所以在进行第二个for循环之前应该加上一个ret = 1;才能解决这个问题。

解决完问题后我们来想一下:

每次

这样会很占用空间,而且过程也很麻烦。

我们下面来进行程序的优化:

7、调试举例2

在VS2022、X86、Debug环境下:

这里我们发现程序进入了死循环在这里我要解释一下:

①i和arr是局部变量,局部变量放在内存的栈区

②战区上的内存的使用习惯是:先使用高地址的空间,在使用低地址的空间

这里我们可以画一幅图更好的展示一下:

i 和 arr 中间空多大空间,完全是取决于编译器的实现,在VS中刚好这里 i 和 arr 中间空了两个整型,所以当 arr[12] 的值会替换 i 的值,从而开始死循环。

不同的编译器中间的空隙不同,如果在VC6.0中这个代码 arr 和 i 之间没有空隙;如果在gcc中这个代码 arr 和 i 之间空一个整型。

8、调试举例3

注意在监视时,观察自定义函数中的值时,想观察一维数组前10个元素应该在监视窗口中输入arr3,10;如果想观察二维数组,则应输入arr4,3。

9、编程常见的错误归类

编程常见错误分为三种:编译型错误、链接型错误、运行时错误。

9.1、编译型错误

编译型错误一般都是语法错误,这类错误一般看错误信息就能找到一些蛛丝马迹的,双击错误信息也能初步跳转到代码错误的地方或者附近。编译错误随着语言的熟练掌握会越来越少,也容易解决。

9.2、链接型错误

编译器报错时会出现“无法解析的外部符号”如下:

这里是由于未包含头文件<stdio.h>

也一样是链接型错误,这里报错是因为函数Add未定义。

9.3、运行时错误

运行时错误需要借助调试,逐步定位问题,调试解决的是运行时问题。

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

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

相关文章

旅行者1号有什么秘密?飞行240多亿公里,为什么没发生碰撞?

旅行者1号有什么秘密&#xff1f;飞行240多亿公里&#xff0c;为什么没发生碰撞&#xff1f; 自古以来&#xff0c;人类就对浩瀚无垠的宇宙充满了好奇与向往。从最初的仰望星空&#xff0c;到如今的深空探测&#xff0c;人类探测宇宙的历史发展可谓是一部波澜壮阔的史诗。 在…

双指针练习:有效三角形的个数

题目链接&#xff1a;611.有效三角形的个数 题目描述&#xff1a; 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 解法一&#xff08;暴力求解&#xff09;&#xff08;会超时&#xff09;&#xff1a; 算法思路&#xff1a; 三层…

Chromium源码阅读:从页面加载到元素展示(1)

​ 从&#xff1c;p&#xff1e;hello world&#xff1c;/p&#xff1e;.html到界面上的hello world 今天&#xff0c;我们一起来看看一个html元素&#xff0c;是如何绘制到界面上。我们选择了最简单的场景&#xff0c;便于快速掌握总体的流程&#xff0c;加深之前阅读知识的…

yolo模型评估指标相关概念

mAP&#xff08;mean Average Precision 平均精度&#xff09;&#xff0c;是一个经常被用来衡量目标 检测模型是否具有较好性能的指标。 计算mAP需要先计算每一类物体的AP&#xff0c;然后取平均值&#xff0c;所以下面介绍的 TP,FP,FN,TN都是针对某一类物体&#xff08;目标&…

Java课程设计:基于Javaweb的超市商品管理系统

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 管理员用户&#xff1a;需要能够添加商品类型以及商品&#xff0c;能够对商品进行管理&#xff0c;能够查询用户信息&#xff0c;能够查询出售记录&#xff1b;普通用户&#xff1a;需要能够搜索商品…

搜维尔科技:【应用】人形机器人将成为引领产业新浪潮的尖兵

特斯拉纷纷发表人形机器人计划&#xff0c;预示这项先进科技将成为下一个颠覆性的殖民地。人形机器人被视为继电脑、智能手机和电车之后,又一个将改变世界的创新产品。 全球人口结构正在快速老化&#xff0c;至2050年60岁以上人口将达22%,是现今的两倍。劳动人口短缺迫在眉睫&…

NewspaceAi之GPT使用新体验

GPT功能 使用地址&#xff1a;https://newspace.ai0.cn/ 上车 挂挡 踩油门&#xff0c;一脚到底&#xff0c;开始你的表演 问题1&#xff1a;你能做什么详细告诉我&#xff1f; 下面内容是GPT的回答 当然&#xff01;作为一个基于GPT-4架构的AI&#xff0c;我能够在许多方面为…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 2

关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 2 语言 &#xff1a;Verilg HDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 2一、引言二、DDR4的简介四、DDR4 SDRAM状态框图 关键词&#x…

【Hachker News】如果你不需要钱,你会干什么?

Hachker News上的一个问题&#xff0c;标题是“如果你不需要钱&#xff0c;你会做什么&#xff1f;” 回答摘要 问题链接&#xff1a;What would you spend your time working on if you didn’t need money? A1&#xff1a; 我会把时间投入到城市周围的农村地区&#xff0c…

Matlab使用Simulink仿真实现AM和BPSK信号的解调

前言 本篇实现了基于AM和BPSK调制的通信系统&#xff0c;采用Bernoulli Binary Generator生成随机二元序列&#xff0c;码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波&#xff0c;频率40Hz&#xff0c;相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输…

【java计算机专业毕设】房屋租赁系统代码源码MySQL springboot vue html maven送文档ppt

1项目功能 【java计算机专业毕设】房屋租赁系统javaweb MySQL springboot vue html maven 送报告 2项目介绍 系统功能&#xff1a; 房屋租赁系统包括管理员和用户和房东三种角色。 该系统包含多个功能模块&#xff0c;分别为管理员、用户和房东提供服务。管理员功能包括个人中…

20.2 JSON-JSON解码、映射数据类型、处理JSON响应

1. JSON解码 JSON解码&#xff0c;即将JSON格式在字符串转换为Go语言数据类型的变量。 函数Unmarshal接受一个JSON字节切片和一个指定目标格式的接口。而这个借口即与JSON字符串中的结果相匹配的结构体类型的变量。 定义结构体类型 type Person struct { ... }创建结构体变量…

聚鼎科技:现在的装饰画做起来难吗

在当代&#xff0c;装饰画作为一种体现个人品味和审美情趣的方式&#xff0c;已经广泛应用于各种室内空间。不少人会产生这样的疑问&#xff1a;在现代化技术和材料的支持下&#xff0c;制作一幅装饰画是变得容易了&#xff0c;还是依旧充满挑战? 现代科技的确为装饰画的制作带…

微信小程序查分易如何使用?

期末马上到了&#xff0c;老师们又开始为发放成绩而头疼了&#xff0c;堆积如山的试卷&#xff0c;密密麻麻的分数&#xff0c;还有那些不断响起的家长电话&#xff0c;真是让人心烦。别担心&#xff0c;今天就让我来介绍一个让老师“偷懒”神器——查分易微信小程序 第一步&am…

ROS中Twist消息类型

Twist消息类型在Robot Operating System (ROS)中是一个常见的数据结构&#xff0c;主要用于描述物体的线性速度和角速度。这种消息类型在ROS的geometry_msgs包中定义&#xff0c;常用于机器人运动控制&#xff0c;尤其是当需要向机器人发布速度指令时。 Twist消息由两个Vector…

6月14日 Qtday2

#include "widget.h" #include "ui_widget.h" #include <QTimer> using namespace std; Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), lab1(new QLabel(this)) //初始化一个标签显示登录状态 {//设置华清远见的标签图…

再谈 dijkstra 算法和最短路径问题

前置文章&#xff1a; dijkstra 算法为什么高效 有向图的负权值边与建模 求单源最短路径的新方法 前天晚上实现了一个基于 dijkstra 算法的求单源最短路径的新算法&#xff0c;整理了一篇文章。我非常不愿意把一些直观的问题太过于技术化&#xff0c;但多年的职业经历偏偏让一…

C#——静态成员和非静态成员详情

静态成员和非静态成员 调用: 静态属性(static) : 类名.属性名调用 非静态属性(没static) : 1.先创建对象 2.对象.属性 特点: 静态方法里面只能访问静态成员 非经态方法中可以访问所有的属性 static数据成员在类的内部声明&#xff0c;但只能在类的外部定义&#xff0c;…

【软件安装9】OpenCV多版本安装Ubuntu18.04

文章目录 一、查看已安装的Opencv版本二、安装新版本三、多版本OpenCV切换 OpenCV 官网 在此 一、查看已安装的Opencv版本 查看已安装opencv的版本 pkg-config opencv --modversion官网下载对应的版本&#xff0c;并解压 opencv3.4.3 二、安装新版本 进入前置准备里下载…

24年法考报名照片千万别乱拍,否则卡审

法考报名照片每年都有很多被卡审&#x1f62d; 常见的问题是 ①照片比例不对&#xff0c;无法上传&#xff0c;人像比例要求非常严格 ②照片像素错误&#xff0c;不能直接拿大图压缩图片&#xff0c;需要做出413*626像素的法考证件照 ③照片文件偏大&#xff0c;照片要求40-100…