首页 > 其他分享 >【译】摇摆你的调试游戏:你需要知道的 Parallel Stack Window 小知识!

【译】摇摆你的调试游戏:你需要知道的 Parallel Stack Window 小知识!

时间:2023-08-08 13:22:04浏览次数:32  
标签:窗口 死锁 Parallel Window 线程 堆栈 Stack

  在 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,Window,线程,堆栈,Stack
From: https://www.cnblogs.com/MeteorSeed/p/17610082.html

相关文章

  • windows10使用Powershell脚本自动初始化磁盘
    如下为脚本内容:1首先使用get-disk命令检测未被初始化的磁盘,磁盘为被初始化属性会为raw,使用rawdisk变量获取未被初始化的磁盘。2判断rawdisk是否有值,如果有,则存在未被初始化磁盘,条件为真,进行下一步。如果空值,则说明系统没有未被初始化的磁盘,输出:没有找到未格式化的磁盘或RAW参数......
  • 虚拟机 的net模式与 桥接模式, windows可以ping通 虚拟机,但是虚拟机无法ping通 windows
    1第一个问题,net与桥接的模式。    2第二个问题,虚拟机ping不通PC,但是PC可以ping通虚拟机。  ......
  • windows下cmake C++库打包成C方式导出
    背景windows下当前的一个项目使用的编译器是mingw,想要使用一个使用msvc编译出来的C++库。方法重新创建一个库,这个使用extern"C"方式导出函数,在函数中调用msvc编译出来的库。项目文件文件结构|--CMakeLists.txt|--floor_calibration||--include|||--floor_c......
  • C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面
    最近的项目要求读取xls文件内的单元格,并且单元格旁边会有复选框标识类型。搜了下只有java的POI有例子,NOPI看项目文档好像是没有实现读取控件的功能。java实现POI POI如何解析出excel中复选框是否被选中https://blog.csdn.net/qq_29832217/article/details/104413475 C#导......
  • 病毒查杀(windows)的几个实例:
    qq盗号的木马:点击server.exe结束进程刷新以后又出来:用taskkill命令:taskkill/pid892taskkill/pid984taskkill/pid2752写入bat文件,全部干掉打不开regedit,看到映像劫持:我们改过名字就行了,regedit.exe改成qwe.exe病毒弄映像劫持是为了干掉杀软或者使用autoruns.exe找到:全部删......
  • 软件测试|最详细的Windows安装Python教程
    简介Python是一种简单易学的高级编程语言,在Windows系统下安装Python非常简单。本文将详细介绍Windows系统下安装Python的教程。步骤1:下载Python安装程序首先,您需要前往Python官方网站(www.python.org/downloads/)…2.x和Python3.x。因为Python2.x版本已经在2020年停止支持,所以我们......
  • 【JavaScript22】关于window
    window对象就是JavaScript的Global对象,所以在使用window对象的属性和方法是不需要特别指明。如:alert,实际上完整的调用是window.alert,通常省略了window对象的引用。//var直接在全局声明的变量,就是全局变量.let不是......varname="xwl";//全局变量,这种变量.实际上是......
  • 【GCC】在Windows下使用GCC编译程序
    1、安装到MinGW下载最新的安装包2、使用将安装包下载解压后,直接使用gcc进行编译:#include"stdio.h"intmain(){printf("hello");}>./gcc.exe-ohello.exeHello.c>./hello.exe......
  • Linux与Windows文件换行符差异
    当一个文件在Windows和Linux上交替操作后,经常遇到一些莫名其妙的问题,如shell脚本无法执行,找不到shell脚本等问题,本文谨就这一问题做一总结,供各位参考;格式差异换行符是行尾(EOL),是一个特殊的字符或字符序列,表示一行文本的结尾和新行的开头;表示换行符的实际代码因操作系统而异......
  • Windows c++检测笔记本是否处于睡眠状态
    最近遇到一个问题,程序需要检测电脑是否处于睡眠状态。一开始使用的方式是在WindowProc里监听WM_POWERBROADCAST消息,对PBT_APMSUSPEND``PBT_APMRESUMEAUTOMATIC消息做处理。但是实际测试中发现,这种方法在台式机中运行良好,但是放到笔记本电脑里就不行,系统休眠时监听不到WM_POWERBRO......