Visual Studio调试代码教学

news2024/11/15 18:37:58

本篇博客主要讲解程序员最应该掌握的技能之一——调试。我个人认为,学习编程,有2件事情非常重要,一是画图,一是调试。下面我会以Visual Studio 2022为例(VS的其他版本大同小异),演示如何调试一个C/C++代码。

在这里插入图片描述

快捷键

常用的快捷键一定要记住!主要有以下4个:

  1. F9打断点,配合F5开始调试。
  2. F10逐过程,F11逐语句。

如果愿意记忆的话,可以再记2个:

  1. ctrl+F5,开始执行,不调试。
  2. shift+F5,结束调试。

以上4+2个快捷键,如果大家使用VS2022编写C/C++代码,希望能够牢牢记住,反复使用。我每次使用这几个快捷键,都是手指往那个方向一按,都形成肌肉记忆了。

下面依次讲解这几个键的作用。

先讲最简单的,ctrl+F5,你只要一按下,程序就开始执行了。注意这个快捷键并不能调试,它只是单纯的执行你的代码。

在这里插入图片描述
如果你想要调试要怎么办呢?一个标准的流程是:

先设置断点。你也可以在调试起来后,再设置。设置断点的方式很简单,用鼠标点到你想设置断点的那一条语句上,然后按F9。比如:
在这里插入图片描述
我用鼠标点到了15行上,然后按了F9,就可以看到15行上出现了一个红点,说明设置断点成功了。

断点有什么用呢?当你调试起来后,每次执行到断点处,就会停下来。而按F5就可以开始调试。我按一个F5:
在这里插入图片描述
可以看到代码直接执行到了第15行,由于遇到了断点,就停了下来。再看看输出窗口:
在这里插入图片描述
此时只执行了“打印1~10”这个逻辑。

那如果我想继续向下执行呢?你每按一下F10,就会执行一条语句。

先按一下F10:
在这里插入图片描述
代码执行了第15行的语句,在屏幕上打印了“a = 10, b = 20”,即将执行第16行语句。注意,左边的“箭头”表示的是即将执行的语句。

再按一下F10:
在这里插入图片描述
再按一下F10:
在这里插入图片描述

那F10和F11有什么区别呢?在绝大多数情况下是没有区别的,但是遇到函数调用语句时,按F10会直接执行完这条语句,是不会进入这个函数的。但是F11会进入函数。举个例子:

对于以下代码,我先在第17行打个断点:
在这里插入图片描述
然后按F5执行到这个断点处:
在这里插入图片描述
此时我有2种选择:第一种,按F10,就会直接执行函数调用,代码会来到第18行:
在这里插入图片描述
重新开始一次调试,此时在相同的情况下,我按F11,就会直接进入Print函数内部:
在这里插入图片描述
这样就可以观察Print函数内部的执行细节。

最后说一下,如果你想停止调试,就按shift+F5:
在这里插入图片描述
可以看到,这个进程直接被干掉了。

信息窗口

光知道如何让代码执行到想要的位置是不够的,还要能够观察一些细节,比如变量的值、函数的调用逻辑、内存中的值等等,这就需要用到信息窗口。主要的信息窗口有(这里只列举我最常用到的):

  1. 监视窗口,用于观察变量和表达式的值。
  2. 内存窗口,用于观察内存中的值。
  3. 调用堆栈窗口,用于观察函数之间的调用逻辑。

在这里插入图片描述
这些窗口都可以在调试起来后在调试–>窗口中找到。其他的窗口都有他们独特的用处,大家可以自行摸索。其实,我选择VS系列来讲解调试的一个重要原因,就是因为它好上手,很容易调试代码。如果使用gdb等工具来调试代码,不适合新手入门,而且很不方便。

先说监视窗口,这里可以监视各个变量和表达式的值:
在这里插入图片描述
而内存窗口可以观察内存,比如观察a在内存中的分布:
在这里插入图片描述
最后再提一下调用堆栈,可以观察函数的调用逻辑,比如:
在这里插入图片描述
可以观察到,main函数调用test1,test1调用test2,test2调用test3。

总结

  1. 说一千道一万,大家一定要多动手调试!调试!调试!!!
  2. 常用的快捷键有F9, F5, F10, F11, ctrl+F5, shift+F5等等。
  3. 如果要让一个程序运行起来,不调试,按ctrl+F5。
  4. 一般来说,会先使用F9打断点,再按F5,程序就会开始执行,直到遇到断点或者程序结束时就停下来。
  5. 如果想逐过程执行,按F10,就会执行下一条语句,遇到函数不会进入函数。
  6. 如果想逐语句执行,按F11,就会执行下一条语句,遇到函数会进入函数。
  7. 常用的信息窗口有:监视窗口、内存窗口、调用堆栈窗口,分别用来观察变量和表达式的值、观察内存中的值、观察函数之间的调用逻辑。
  8. 最后再提一遍:动手调试!!!

感谢大家的阅读!

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

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

相关文章

测试开发实战项目 | 搭建Pytest接口自动化框架

一、预研背景 目前系统研发多为前后端分离,当后端接口研发完成后,可以不依赖前端界面通过接口测试提前发现问题并解决。同时由于软件迭代周期不断缩短,开发新功能后又担心影响原有功能,可以通过接口自动化进行原有功能快速回归测…

spi,iic,uart,pcie区别

一、spi SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是同步传输协议,特征是:设备有主机(master)和从机(slave)的区分,主机在通讯时发送…

分治与减治算法实验: 排序中减治法的程序设计

目录 前言 实验内容 实验目的 实验分析 实验过程 流程演示 写出伪代码 实验代码 代码详解 运行结果 总结 前言 本文介绍了算法实验排序中减治法的程序设计。减治法是一种常用的算法设计技术,它通过减少问题的规模来求解问题。减治法可以应用于排序问题&…

mysql数据库自动备份

前言 服务器中数据库的数据是最重要的东西,如果因为某些情况导致数据库数据错误,数据错乱或数据库崩溃,这时一定要及时的修复,但如果数据丢失或数据没法用了,这时就要回滚数据了,而这时就需要我们经常的备份数据库的数据 正文 一般别人都会推荐使用Navicat来备份和连接数据库…

Kafka时间轮(TimerWheel)--算法简介

一、简介 一个简单的时间轮是一个定时器任务桶的循环列表。 让u作为时间单位。尺寸为n的时间轮有n个桶,可以在n*u的时间间隔内保存定时器任务。每个bucket保存属于相应时间范围的计时器任务。 在开始时, 第一个桶保存[0,u)的任务…

第7章 “字典”

1.字典简介 字典是什么? 解答:与集合类似,也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。(键值对是最重要的特性)在Es6中新增了字典,名为Map字典的常用操作:增删改查 const map new Map()/…

使用PY003基于外部中断+定时器的方式实现NEC红外解码

写在前边 最近项目用到一款遥控器是38K红外载波,NEC协议的,找了很多帖子有看到用外部中断下降沿判断(但可惜判定数据的方式是while在外部中断里面死等的),有看到用100us定时器定时刷来判断,感觉都不太适合用在我这个工…

基于MATLAB实现WSN(无线传感器网络)的LEACH(低能耗自适应集群层次结构)(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 低能耗自适应集群层次结构(“LEACH”)是一种基于 TDMA 的 MAC 协议,它与无线传感器网络 &a…

[2018.09.25][Sourceinsight]4.0配置

1 字体放大 (1)panel fonts: option,preference,colors&font (2)code fonts: option,file type options 2 修改默认字体 Alt y 3 显示行号 点击菜单栏View->Line Numbers 4 破解 https://blog.csdn.net/biubiuibiu/article/details/78044232 5 全局搜索字…

在Spring Boot微服务使用knife4j发布后端API接口

记录:422 场景:在Spring Boot微服务上,应用knife4j发布后端API接口,辅助开发与调试。 版本:JDK 1.8,Spring Boot 2.6.3,knife4j-3.0.3,springfox-swagger2-3.0.0。 Knife4j: 是一个集Swagger2 和 OpenAPI3为一体的增…

第三十二篇,记一次Windows下Qt使用boost的经历

Win10系统 Qt版本如下所示 Qt中使用的编译器是MinGW,如下图 boost版本是1.82.0 好的,描述一下过程: 按这个教程下载、编译boost,在boost的目录下生成了stage/lib/目录,然后加入到Qt工程里,主要是include目…

win10安装Anaconda,配置Pytorch环境

一、安装Anaconda Anaconda实际上是一个包管理器,可以理解为一个工具。Anaconda自带Python(选中版本)解释器以及其他一些数据分析与挖掘需要的模块而无需用户手动添加这些常用模块(安装模块会出现各种错误)。早期学Pyt…

Django个性化推荐系统,以电影为例

背景 随着科学技术发展,电脑已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代。电影…

flask+opencv:实时视频直播推流平台Demo

简介:推流,指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。网上调查、对话访谈、在线培训等内容现场发布到互联网上。利用互联网的直观、快速,表现形式好、内容丰富、交互性强、地域不受限制、受…

华为OD机试真题(Java),猴子爬山(100%通过+复盘思路)

一、题目描述 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯: 每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 二、输入描述 输入只有一个整数N&…

AI语音生成器是下一大安全威胁吗?

ChatGPT一经上市,有关监管人工智能的讨论就开始升温。任何试图遏制这种技术的做法都可能需要国际合作,需要我们在过去几十年来从未见过的合作程度,因此不太可能遏制人工智能。 人工智能是一项功能强大的技术,有望彻底改变我们生活…

AIGC - 生产力新工具 Bito AI

文章目录 Bito AI 是什么Bito AI 能干啥官网免费的吗?如何使用 Bito方式一:方式二:在这里插入图片描述方式三 Bito AI 是什么 Bito AI是继Github Copilot、Cursor、CodeWhisperer等AI智能编程产品之后发了一大AI编程工具 。 Bito是一款建立…

表情迁移 - 2D人像动起来(附带生成web服务提供api接口)

左边原图,右边是渲染后的视频文件 开源地址:https://github.com/AliaksandrSiarohin/first-order-model 官方模型下载地址(需科学上网): google-driveyandex-disk本文docker容器已自带人脸模型 若还需要行为、物品、动画等追踪模型需下载后拷贝至容器内即可使用 API请求…

Android之 Camera相机使用

一 简介 1.1 随着信息时代的发展,相机在我们生活中使用越来越频繁,也成为手机的基本配置之一。相机可以用来拍照,拍视频,人脸识别,视频聊天,扫码支付,监控等常见领域 不管什么场景&#xff0c…

DolphinScheduler 2.0.5详解

文章目录 第一章 DolphinScheduler介绍1.1 关于DolphinScheduler1.2 DolphinScheduler特性1.3 配置建议1.3.1 Linux 操作系统版本要求1.3.2 服务器建议配置1.3.3 生产环境1.3.4 网络要求1.3.5 客户端 Web 浏览器要求 第二章 DolphinScheduler安装部署2.1 安装部署介绍2.2 单机版…