【译】摇摆你的调试游戏:你需要知道的 Parallel Stack Window 小知识!
在 Visual Studio 2022 17.6和17.7中,我们在 Parallel Stack 窗口中添加了大量新功能,可以将您的多线程调试提升到一个新的水平。
但是 Parallel Stack 窗口能为您做些什么呢?答案很简单——它提供了关于代码如何在多线程、并行或异步环境中运行的有价值的观察。随着多线程编程成为常态,理解代码在并行环境中的行为是至关重要的。幸运的是,Parallel Stack 窗口通过可视化地呈现多线程的执行流来挽救。通过以下提高效率的技巧,您将毫不费力地发现并解决并行编程产生的任何问题。那么,让我们释放您调试能力的全部潜力吧!
下面所有的功能在我们最新的 VS 预览版中可用。
通过单击“View all threads”从 Call Stacks 启动 Parallel Stack
您可能熟悉从 Debug > Windows 菜单中启动 Parallel Stack 窗口,但是,您知道有一种新的方法可以直接从 Call Stack 窗口访问它吗?
通过使用“View all threads”按钮,您可以毫不费力地在这两个窗口之间切换,并更好地了解代码是如何并行执行的。只需单击一下,就可以平滑地从检查调用堆栈转化到可视化多个线程的流程,从而使调试过程更加深刻和高效。

通过 Parallel Stack 中的过滤选项改善分析
您是否曾经遇到过这样的情况:您正在对具有多个线程的复杂应用程序或代码进行故障排除,但是由于有许多线程和帧,它很快就变得混乱了?精确定位与您正在检查的问题相关的代码路径或线程可能非常困难。
但是你可能没有意识到并行堆栈窗口现在提供了一个过滤选项,可以让你有选择地显示或隐藏特定的线程或帧。这意味着您可以轻松地专注于对您重要的帧和线程,使您能够获得更好的清晰度,并在更短的时间内完成更多任务。
1 在 Threads/Tasks 视图中,导航到 Parallel Stack 窗口的顶部菜单,并选择“Filter”按钮。
2 通过选择它们来选择您想要关注的特定模块或方法名。如果需要,您甚至可以展开和单独选择线程。
3 一旦过滤器被应用,所有不相关的堆栈将被隐藏,允许您只关注选定的堆栈。
4 要恢复原始/未过滤的视图,请单击过滤器下拉菜单中的“Clear Filters”以删除已应用的过滤器。

通过 Parallel Stack 中的“Show External Code”增强清晰度
在处理多线程应用程序时,线程与不同的外部库或框架进行交互是很常见的。但是,在调试时,您可能希望将注意力集中在应用程序中的特定堆栈上,而不是被大量的外部代码所淹没。在某些情况下,理解应用程序与外部依赖项之间的交互可能是至关重要的。
Parallel Stack 和 Call Stack 窗口中的“Show External Code”切换选项在这种情况下非常有用。它允许您从堆栈跟踪中选择性地包括或排除外部代码,从而提供更集中、更有效的调试体验。
1 点击 Parallel Stack / Call Stack 工具栏中的“Show External Code”按钮。
2 你会注意到两个窗口中的所有外部调用堆栈/帧都将被隐藏并折叠成带有[External Code]注释的帧。
3 要再次查看外部代码调用堆栈/帧,请再次点击“Show External Code”按钮。

Parallel Stack 中的搜索
您知道 Parallel Stack 窗口已经有一个搜索功能,可以帮助您缩小要关注的堆栈的范围。但是这里有一个专业建议:您可以通过直接使用带有 threaddId、threadName 或 taskId 的搜索过滤器进行搜索来进一步增强搜索体验。这将使查找和分析您感兴趣的特定线程或任务变得更加容易。搜索愉快!
1 请选择“Parallel Stack”窗口顶部菜单中搜索框旁边的下拉菜单。
2 您可以选择 threadId、threadName 或 taskId。
3 在搜索框中输入所需的 threadId、threadName 或 taskId,然后按“Enter”。
4 搜索的线程/任务将在 Parallel Stack 窗口中高亮显示。

Parallel Stack 中的复制
您知道并行堆栈窗口提供了多种复制内容的方法吗?只需单击几下,就可以复制特定的线程信息、帧,甚至整个堆栈跟踪。您可以在调试环境之外分享、报告或分析复制的数据。
Click and Copy
1 单击节点头部选择节点中的所有帧,或者双击节点头部选择整个堆栈。
2 如果需要,按住“Shift”键并选择多个感兴趣的节点。
3 或者,您也可以使用右键单击上下文菜单“Select frames above/below”来选择节点(上面是 Task View,下面是 Threads View)。
4 现在,您可以通过使用快捷键“Ctrl+C”进行复制,“Ctrl+V”进行粘贴,将堆栈信息复制为文本或图像。
Drag and copy
1 单击并拖动鼠标以从 Parallel Stack 窗口中选择多个节点。
2 现在,您可以通过使用快捷键“Ctrl+C”进行复制,“Ctrl+V”进行粘贴,将堆栈信息复制为文本或图像。
3 要将 Parallel Stack 窗口中的所有内容保存为图像(.png),只需使用位于窗口工具栏右上方的 Save 按钮。

用 Parallel Stack 的指示器检测死锁
您是否曾经遇到过这样的情况:您的多线程应用程序处于死锁状态,并且您不明白为什么会出现死锁以及涉及哪些线程?

在这里,来自并行堆栈窗口的死锁指示器将真正节省时间。它高亮显示了涉及死锁的所有线程,并提供了大图来理解具体情况。
当应用程序处于死锁状态时,查找显示有问题线程的优先级指示器图标,例如死锁是红色叉子和等待场景是蓝色叹号。
用 Method View 揭示方法调用
您是否遇到过这样的情况:并行堆栈包含大量的帧,这使得专注于与您的分析相关的特定方法变得具有挑战性?那么,Parallel Stack 的 Method View 可能是您的救星,这个有价值但鲜为人知的特性揭示了调用者-被调用者关系,使您能够释放这个窗口的全部潜力。
只需选择方法开关,您将看到一个浓缩的堆栈,根据您对所选方法的特定兴趣进行定制。要访问该视图,请单击并行堆栈窗口顶部菜单中的小“Method View”开关。
选中后,Parallel Stack 将显示方法视图。要恢复到 Tasks 视图,只需再次单击 Methods 按钮。

最后,看看我们团队制作的精彩视频教程!他们将逐步引导您了解如何在 VS 2022的 Parallel Stack 窗口中利用 Threads 和 Tasks 视图的全部潜力。
因此,下次在 Visual Studio 中调试并行应用程序时,请记住探索 Parallel Stack 窗口的隐藏宝藏。这些工具将使您能够更有效地工作,更快地识别和解决问题,并最终成为调试专家。此外,请通过开发者社区网站报告 Visual Studio 上的任何问题或反馈。
Happy debugging!
原文链接:https://devblogs.microsoft.com/visualstudio/rock-your-debugging-game-parallel-stack-window-tips-you-need-to-know/

【译】摇摆你的调试游戏:你需要知道的 Parallel Stack Window 小知识!的更多相关文章
- Valve开源了Direct3D到OpenGL的转译层,方便开发者迁移游戏到Linux(面向游戏玩家的六款最佳 Linux 发行版)
Valve开源了Direct3D到OpenGL的转译层,方便开发者迁移游戏到Linux:https://github.com/ValveSoftware/ToGL Valve SteamBox主机系统 ...
- Egret白鹭开发微信小游戏程序跳转功能(由一个小游戏跳转到另一个小游戏)
假设我们要实现的功能是从小游戏A跳转到小游戏B 对于小游戏A: (1)在platform.ts中添加代码如下: /** * 平台数据接口. * 由于每款游戏通常需要发布到多个平台上,所以提取出一个统一 ...
- 使用gdb调试游戏服务器
前言 谈论gdb重要性 一般来说.提gdb,命令用于调试."命令",用户是几乎相同的复杂话.而事实确实如此,实际的开发调试必须用到gdb. 如今.大多数Linux系统是存在于ser ...
- 【译】使用 ndb 调试 node 应用
原文链接:Debugging Node.js Application Using ndb Google Chrome 实验室发布了一款新的 node debug 工具来提升开发者体验,本文将会全面介绍 ...
- 虚拟现实外包公司—VR游戏你不知道的以及你该知道的WebVR
VR基础——原理其实很简单 我们地球人之所以能够看到立体的景物,是因为双眼可以各自独立看东西,也就是左眼只能看到左眼的景物,而右眼只能看到右眼的景物.因为人类左右两眼有间距,造成两眼的视角有些细微的差 ...
- Java程序员应该知道的10个调试技巧
试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运 ...
- [译] 你该知道的javascript作用域 (javascript scope)(转)
javascript有一些对于初学者甚至是有经验的开发者都难以理解的概念. 这个部分是针对那些听到 : 作用域, 闭包, this, 命名空间, 函数作用域, 函数作用域, 全局作用域, 变量作用域( ...
- (转) Java程序员应该知道的10个调试技巧
原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺 ...
- Java程序员应该知道的10个Eclipse调试技巧
Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 1 条件断点 2 异常断点 3 监视点 4 评估/检查 5 修改变量值 ...
- [译] 关于 Angular 依赖注入你需要知道的
如果你之前没有深入了解 Angular 依赖注入系统,那你现在可能认为 Angular 程序内的根注入器包含所有合并的服务提供商,每一个组件都有它自己的注入器,延迟加载模块有它自己的注入器. 但是,仅 ...
随机推荐
- Pillow模块——生成随机验证码
urls.py path('get_code/',views.get_code), views.py中 from PIL import Image,ImageFont,ImageDraw " ...
- 2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一。请问部署在k3s中,yaml如何写?
2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一.请问部署在k3s中,yaml如何写? 答案2023-01-13: yaml如下: apiV ...
- 2022-08-16:绳子总长度为M, 100 -> M, (6, 100) (7,23) (10,34) -> arr, 每一个长度的绳子对应一个价格,比如(6, 10)表示剪成长度为6的绳子,对应
2022-08-16:绳子总长度为M, 100 -> M, (6, 100) (7,23) (10,34) -> arr, 每一个长度的绳子对应一个价格,比如(6, 10)表示剪成长度为6 ...
- 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p
2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...
- ABP - 初识 ABP
ABP框架 ABP是用于创建现代化Web应用程序的完整体系结构和强大的基础架构,以模块化的方式进行开发,所有模块以nuget包的方式提供,开箱即用,遵循最佳实践和约定,提供SOLID开发经验. 缩写 ...
- Python这样读写Excel数据,这样简直不要太粗暴!
什么是xlrd&xlwt? xlrd和xlwt是Python语言中,读取和写入Excel数据的扩展工具.xlrd为xls文件read库,xlwt为xls文件write库.具体请看xlrd百度百 ...
- GIT多场景下使用
git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便.但找工作面试和一些需彰显个人实力的场景, ...
- C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?
某日小二参加XXX科技公司的C++工程师开发岗位2面: 面试官:指针.引用.解引用和取地址是C++中的重要概念,请问它们在语法和语义上有所不同? 小二:指针是一个变量,它存储了一个内存地址. 小二:引 ...
- SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中
SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中 转载 首先我们应该知道我们把SPRINGBOOT项目打包成WAR包和 ...
- R 包初学者指南
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 基于 11 个最常见的用户问题介绍 R 软件包. R 包是由社区开发 (developed b ...