由入门到深解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

相关文章

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3