Visual Studio 小更新:改善变量的可见性

在 Visual Studio 2022 17.10 预览版 2 中,我们改善了一些小功能,例如:在调试版本中,变量窗口现已可以显示调用堆栈中任意帧的局部变量。
如需体验此功能,请直接安装最新预览版本,就可以知道是怎么一回事儿了。

问题:变量窗口中缺失的东西

你是否碰到过这样的问题?

我们正在调试一些代码,并在函数 foo 中命中了一个断点。我们需要在调用堆栈的上方检查一些局部变量的值,因此我们打开调用堆栈窗口并单击该帧。

在本例中,我们希望看到变量 y 的值,该值是计算我们正在检查的函数 foo 的参数的输入。很遗憾,它不会出现在本地变量窗口中,如下图所示:

>> 请移步至 www.topomel.com 以查看图片 <<

该变量无法显示的原因与范围界定以及调用堆栈的遍历方式有关。变量 y 的作用域仅限于该 if 语句;当您位于 if 块之外时,Y 将不再存在。

而且,调用堆栈的工作方式是,我们用来确定作用域的返回地址实际上是调用后的下一条指令,或者在本例中是 return 语句。

改善变量可见性

在 Visual Studio 2022 17.10 预览版 2 中,我们解决了此问题。
现在,在这个示例程序中,您将看到变量 y 的值,如下图所示:

>> 请移步至 www.topomel.com 以查看图片 <<

我们可以看到,断点位于同一位置,但现在当您单击上一帧时,您会看到“下一个语句”箭头仍指向调用,因此该作用域中的所有变量现在都可用。

我们是怎么做到的?好吧,我们可以采取很多方法,但我们采用的方法之一是更改调试构建的代码生成,以在每次结束词法范围的调用后包含nop指令(并且仅包含作为范围中最终指令的调用)。

>> 请移步至 www.topomel.com 以查看图片 <<

调用 foo 后的额外 nop 指令是使其工作的原因。它位于同一范围内,因此一切都按预期工作,而无需修改调试器或堆栈遍历算法。这样做的优点是还可以在较旧的调试器上工作。

需要注意的是,此方法确实会增加调试版本中生成的代码大小,因此如果出现问题,我们添加了一个开关来禁用此行为。
只需将
/d2EnsureCallScopeForDebugging- 添加到项目命令行下的“其他选项”中,即可获得之前不生成额外 nops 的行为:

>> 请移步至 www.topomel.com 以查看图片 <<

总结

我可以感受到,Visual Studio 开发团队确实在细节上下功夫了。
希望大家可以下载最新版本把玩把玩,但记得别耽误正事儿!

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Improvements in Variable Visibility when Debugging》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复盘一下我用过的设计模式

建造者模式 保卫萝卜中使用了建造者模式。UML图如下&#xff1a; 接口&#xff1a; public interface IBuilder<T> {//获取到游戏物体身上的脚本对象&#xff0c;从而去赋值T GetProductorClass(GameObject gameObject);//使用工厂去获取具体的游戏对象GameObject GetP…

你在测试金字塔的哪一层(下)

​在《你在测试金字塔的哪一层&#xff08;上&#xff09;》中介绍了自动化测试的重要性以及测试金字塔。测试金字塔分为单元测试、服务测试、UI测试&#xff0c;它们分别是什么呢&#xff1f;本期文章让我们一起详细看看测试金字塔的不同层次。 一、单元测试 单元测试是指对程…

猪瘟病毒筛查系统的工作原理

TH-P160S猪瘟病毒筛查系统是一种专门用于检测猪瘟病毒的设备或技术组合&#xff0c;其核心目的是确保生猪养殖、产品流通等环节的安全&#xff0c;防止猪瘟病毒的扩散和传播。猪瘟&#xff0c;又称为“烂肠瘟”&#xff0c;是由黄病毒科瘟毒病属的猪瘟病毒引起猪的一种急性、发…

如何使用PHP和RabbitMQ实现延迟队列(方式二)?

前言 前几天写了一篇关于PHP和RabbitMQ如何通过插件实现延迟队列的功能。 今天写另外一篇不需要插件的方式&#xff0c;使用RabbitMQ的死信队列&#xff08;Dead-Letter-Exchanges, DLX&#xff09;和消息TTL&#xff08;Time-To-Live&#xff09;。 这种方法涉及到设置消息…

3款免费甘特图制作工具的比较和选择指南

GanntProject GanttProject https://www.ganttproject.biz/ 是一款项目管理和调度应用&#xff0c;适用于 Windows、macOS 和 Linux。它易于使用&#xff0c;无需任何设置&#xff0c;适用于个人用户和小型团队。该应用提供任务层次结构和依存关系、里程碑、基准行、Gantt 图表…

Knative 助力 XTransfer 加速应用云原生 Serverless 化

作者&#xff1a;元毅 公司介绍 XTransfer 是一站式外贸企业跨境金融和风控服务公司&#xff0c;致力于帮助中小微企业大幅降低全球展业的门槛和成本&#xff0c;提升全球竞争力。公司连续7年专注 B2B 外贸金融服务&#xff0c;已成为中国 B2B 外贸金融第一平台&#xff0c;目…

20240325,结构嵌套,联合,全局变量,编译预处理和宏,声明

二&#xff0c;结构 2.3 结构中的结构 2.3.1 结构数组 #include<stdio.h>//下一秒 struct time{int hour;int min;int sed; }; struct time timeupdate(struct time now); int main(){struct time testTime[5]{{11,59,59},{12,0,0},{1,29,59},{23,59,59},{19,12,27}…

数据结构 之 队列习题 力扣oj(附加思路版)

优先级队列 #include<queue> --队列 和 优先级队列的头文件 优先级队列&#xff1a; 堆结构 最大堆 和 最小堆 相关函数&#xff1a; front() 获取第一个元素 back() 获取最后一个元素 push() 放入元素 pop() 弹出第一个元素 size() 计算队列中元素…

Maven学习记录

一、简介 1. Maven&#xff1a; 基于 Java 平台的项目管理和整合工具&#xff0c;将项目的开发和管理过程抽象成一个项目对象模型&#xff08;POM&#xff09;。开发人员只需要做一些简单的配置&#xff0c;Maven 就可以自动完成项目的编译、测试、打包、发布以及部署等工作。…

把学浪视频保存到电脑方法

为了可以更好的学习很多用户都会想要将学浪的视频下载下来,但是学浪视频官方却没有提供下载方法,为了将学浪视频下载下来我研究了一段时间,总算有突破,找到了下载方法 文章中所用到的工具就在下面,有需要的自己取一下 链接&#xff1a;https://pan.baidu.com/s/1y7vcqILToULr…

go的for循环应该这么用

目录 目录 一&#xff1a;介绍 1: for流程控制 2&#xff1a;for-range流程控制 二&#xff1a;实例展示 1&#xff1a;//按照一定次数循环 2&#xff1a;//无限循环 3: //循环遍历整数、各种容器和通道 4&#xff1a;遍历通道 5&#xff1a;//指针数组循环 6&…

git笔记之撤销、回退、reset方面的笔记

git笔记之撤销、回退、reset方面的笔记 code review! 文章目录 git笔记之撤销、回退、reset方面的笔记1.git 已经commit了&#xff0c;还没push&#xff0c;如何撤销到初始状态git reset --soft HEAD~1git reset HEAD~1&#xff08;等同于 git reset --mixed HEAD~1&#xff0…

机器学习OpenNLP

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl OpenNLP概述 OpenNLP是一个基于机器学习的自然语言处理开发工具包&#xff0c;它是Apache软件基金会的一个开源项目。OpenNLP支持多种自然语言处理任务&#xff0c;如分词、…

计算机网络:现代通信的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何忽略Chrome最小字号的限制

通过控制台调整字体大小时&#xff0c;可以发现即便设置了小于12px的字号&#xff0c;也并不会变小&#xff0c;这是因为Chrome默认最小字号为12px。 在Chrome设置中的外观选项卡中可以发现&#xff0c;默认字体是16px。将最小字号改为0&#xff0c;就能随意设置小于12px的字号…

面向对象【枚举类】

文章目录 枚举类定义枚举类enum 方式定义的要求和特点 enum 中常用方法实现接口的枚举类 枚举类 枚举类是一种特殊的类&#xff0c;它用于定义一组固定数量的常量。枚举类在实际开发中非常有用&#xff0c;因为它们可以增加代码的可读性和可维护性。本文将介绍Java枚举类的定义…

[网鼎杯2018]Unfinish 两种方法 -----不会编程的崽

网鼎杯太喜欢搞二次注入了吧。上次是无列名盲注&#xff0c;这次又是二次注入盲注。。。不知道方法还是挺难的。哎&#xff0c;网鼎嘛&#xff0c;能理解透彻就很强了。能自己做出来那可太nb了。 又是熟悉的登录框。不知道这是第几次看见网鼎杯的登录框了。后台扫描一下&#x…

基于深度学习的海洋鱼类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................................ % 对测试集进行分类预测 [Pr…

西安石油大学校赛培训(1)数学模型简介 初等模型

数学建模竞赛 什么是数学建模竞赛?数学竞赛给人的印象是高深莫测的数学难题,和一个人、一支笔、一张纸&#xff0c;关在屋子里的冥思苦想&#xff0c;它训练严密的逻辑推理和准确的计算能力&#xff0c;而数学建模竞赛从内容到形式与此都有明显的不同。 数学建模竞赛的题目由日…

高防服务器、高防IP、高防CDN的工作原理是什么

高防IP高防CDN我们先科普一下是什么是高防。“高防”&#xff0c;顾名思义&#xff0c;就犹如网络上加了类似像盾牌一样很高的防御&#xff0c;主要是指IDC领域的IDC机房或者线路有防御DDOS能力。 高防服务器主要是比普通服务器多了防御服务&#xff0c;一般都是在机房出口架设…