由入门到深解VS调试技巧

2023-10-09 19:30
文章标签 技巧 入门 调试 vs 深解

本文主要是介绍由入门到深解VS调试技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VS调试技巧

  • Visual Studio 简介
    • VS的安装简介:
      • 第一步
      • 第二部
    • VS的调试介绍
      • Debug和Release的介绍
      • 调试的基本技巧
      • 较深次了解调试

Visual Studio 简介

visual studio (简称VS) 是集成环境(含VC等)的一个软件,它本身也是由微软公司开发的工具和产品,它像是是一个可视化的工具集合,它将代码编辑,编译器,连接器,资源编辑器什么的整合在同一个开发环境中,可以编写Windows、Linux和iOS等平台的程序,可进行很多种编辑语言,比如:C、C++、Python和JavaScript等等。

VS的安装简介:

第一步

  1. 首先我们需要安装visual studio这个软件,在进入VS官方官网
    链接: VS官方下载途径,这是官方官网,对于一些不是太过专业的人来说,只需要在其下载【社区版】的,是免费的。
    下载完成后会有:
    在这里插入图片描述

第二部

在已经或者下载好了VS软件的基础上,我们可以创建一个自己的项目:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 源文件就是相当于是你完成任务的,在内写源代码。
    -在其中创建自己的源文件:
    其中在这里插入图片描述
    这样就创建了一个项目,进行代码的编写。

VS的调试介绍

  • 调试是进行调试后讨论查找错误(找出bug),假如说你写出一段代码,但是却会报错,这时就会需要调试,在寻找出程序中的bug;

在这里插入图片描述

  • 调试的基本步骤:

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

  • 当然对于一个嘎嘎肝的程序员来说,调试是在编程中很重要的一个技巧。
    在这里插入图片描述
    当然在这里,需要注意一点,这里有的是专门的调试版本发布版本

Debug和Release的介绍

1.Debug版本是被称为:调试版本,可进行调试,是因为在此版本下存在调试材料,它包含调试信息,并且不做如何优化,便于程序员的调试程序。(它是给程序员的版本)
2.Release版本被称为:发布版本,不可进行调试,它是往往进行了各种优化,使得在代码大小和运行速度都是最优的,以便于用户很好的体验。(它是个给用户体验的版本)

在这里插入图片描述
在VS上可以进行交换,这样就可以自由切换两个版本进行测试了。

可以看到在同一段代码,最后实现需要的大小,Debug需要的明显比Release版本所需更大的内存空间大小,并且在运行速度上有明显优势。

在这里插入图片描述

调试的基本技巧

  • 接下来我将以以下代码一样一样的进行调试;
#include<stdio.h>int main()
{printf("haha");int i = 0;for (i = 0; i < 10; i++){printf("hehe\n");}return 0;
}

接下来可以看到:很多功能,其中可以看到:开始调试和开始执行(不调试),这两个功能后面都有其快捷方式,如开始执行但不调试:Ctrl+F5;

在这里插入图片描述

Ctrl+F5:,按下Ctrl+F5,开始执行,但是不会进行调试。
开始执行代码,直到代码全部执行结束的一个过程:

请添加图片描述

F5:是开始调试,一般会和其中F9一起进行使用,因为,在F5调试后程序不会停下来,直到程序结束才会停下来,这个时候就需要断点的存在帮助程序可以快点来到你想要执行是点名端前。
——
F9:是可以在程序任意设置断点,让程序在执行到这个断点这停下来。

在这里插入图片描述

如图可以看到描述如果按下F5,就会让代码执行到第13行这里停下来。

在这里插入图片描述
请添加图片描述

  • 此时当程序执行到断点停下时,此时只打印出“haha”;

注意: 对于断点,如果对于循环体,可以控制在第几次循环后停下来,如:右击那个红点,进入条件,并且限制出条件,就可以。对着红点的那一行在此按下F9就可以取消这个断点,当然可以设置多个断点,但断点之间执行顺序也是依次执行。

F10:是逐语句,执行下去,直到,程序结束。
——
F11:是逐过程执行下去。

  • 这两者之间存在着的差别,可以看以下代码执行:
#include<stdio.h>int add(int x, int y)
{return x + y;
}int main()
{int i = 0;int j = 0;scanf("%d%d", &i, &j);int ret=add(i, j);printf("%d\n", ret);return 0;
}

对于F10
———— 如果遇到函数调用,直接就执行完成。
请添加图片描述
对于F11
————相比于F10的调用,更加的细致,会进入函数观察函数执行的过程
——
请添加图片描述
注意:在执行语句的时候,会有一个箭头,则箭头指向的那一个语句,就是你当时在进行执行的语句。

较深次了解调试

  • 当了解了上述的几个最基本的功能后,可以慢慢的挖掘出调试的更好的功能,如:
    注: 在这个窗口是在进入调试的后才会显示出后面的窗口的。
    较重要的调试功能:如图圈出来的功能,用的频率更高。
    在这里插入图片描述

监视:可以监视你在调试时,可以观察变量的变化的值;
——
内存:在调用之后,用于观察内存消息。

对于监视:当打开监视窗口,会有四个小监视,这四个监视可以打开任意一个,就可以进行观察。
在这里插入图片描述
如:这就是监视窗口;

在这里插入图片描述
又如你要观察变量i的值的变化,就可以输入变量名称i,用以观察变量 i 的变化。
在这里插入图片描述

  • 当然,你也可以一次观察多个变量。

1.在监视窗口可以观察,在进行逐句调试时,观察变量 i 的变化。

请添加图片描述
——除了监视窗口外,还有自动窗口 :
在这里插入图片描述

自动窗口:会自动显示出所有的变量的变化的观察;
请添加图片描述

对于内存:可以直接观察内存地址,其和监视的道理差不多,可以观察数值放入内存以后的现像。

如:

加油
——
对于调用堆栈

我想大家应该了解栈区堆区;其中栈区是用来存放局部变量、形式参数等等。

在这里插入图片描述

  • 在堆栈又称是和数据结构中的一种 ,栈区存放有个特点 : 由于只能在顶端执行插入和删除,因此最先插入堆栈的元素将最后从堆栈中删除,因此,有时堆栈被称为后进先出.
    (可以看出手枪的弹夹一样,最先放进去的子弹则最后打出)。
    在这里插入图片描述

可以举个例子:用以下代码来表示:对于这个含有很多函数调用,可以在栈上很清楚观察在堆栈上的变化;

void text2()
{printf("haha");
}void text1()
{text2();
}void text()
{text1();
}int main()
{text();return 0;
}
  • 程序在执行函数调用的一个逻辑,可以在函数调用栈堆来显现:
  • 也可以在该过程中看到入栈,出栈操作

请添加图片描述

上述这些操作可以让我们更加深入程序的更深层次,了解并且熟练的掌握它们会让我们对程序有更好的理解。

  • 听过一句话:初学者可能80%的时间在写代码,只有20%的时间在调试;但是对于一个程序员,可能有80%的时间在调试,只有20%的时间在写代码。

——————

  • 以上可能还有一些很基本的调试技巧遗漏,望大家海涵,最后希望诸君且听这龙吟

这篇关于由入门到深解VS调试技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175082

相关文章

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务