2

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

 1 year ago
source link: https://www.cnblogs.com/MeteorSeed/p/17610082.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

  在 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”按钮,您可以毫不费力地在这两个窗口之间切换,并更好地了解代码是如何并行执行的。只需单击一下,就可以平滑地从检查调用堆栈转化到可视化多个线程的流程,从而使调试过程更加深刻和高效。

270073-20230806211301296-1899945813.gif

通过 Parallel Stack 中的过滤选项改善分析

  您是否曾经遇到过这样的情况:您正在对具有多个线程的复杂应用程序或代码进行故障排除,但是由于有许多线程和帧,它很快就变得混乱了?精确定位与您正在检查的问题相关的代码路径或线程可能非常困难。

  但是你可能没有意识到并行堆栈窗口现在提供了一个过滤选项,可以让你有选择地显示或隐藏特定的线程或帧。这意味着您可以轻松地专注于对您重要的帧和线程,使您能够获得更好的清晰度,并在更短的时间内完成更多任务。

  1 在 Threads/Tasks 视图中,导航到 Parallel Stack 窗口的顶部菜单,并选择“Filter”按钮。

  2 通过选择它们来选择您想要关注的特定模块或方法名。如果需要,您甚至可以展开和单独选择线程。

  3 一旦过滤器被应用,所有不相关的堆栈将被隐藏,允许您只关注选定的堆栈。

  4 要恢复原始/未过滤的视图,请单击过滤器下拉菜单中的“Clear Filters”以删除已应用的过滤器。

270073-20230806211356109-1706661490.gif

通过 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”按钮。

270073-20230806211542689-1660500789.gif

Parallel Stack 中的搜索

  您知道 Parallel Stack 窗口已经有一个搜索功能,可以帮助您缩小要关注的堆栈的范围。但是这里有一个专业建议:您可以通过直接使用带有 threaddId、threadName 或 taskId 的搜索过滤器进行搜索来进一步增强搜索体验。这将使查找和分析您感兴趣的特定线程或任务变得更加容易。搜索愉快!

  1 请选择“Parallel Stack”窗口顶部菜单中搜索框旁边的下拉菜单。

  2 您可以选择 threadId、threadName 或 taskId。

  3 在搜索框中输入所需的 threadId、threadName 或 taskId,然后按“Enter”。

  4 搜索的线程/任务将在 Parallel Stack 窗口中高亮显示。

270073-20230806211620043-453904557.gif

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 按钮。

270073-20230806211716558-1046384322.gif

用 Parallel Stack 的指示器检测死锁

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

270073-20230806211753649-1218801971.png

  在这里,来自并行堆栈窗口的死锁指示器将真正节省时间。它高亮显示了涉及死锁的所有线程,并提供了大图来理解具体情况。

  当应用程序处于死锁状态时,查找显示有问题线程的优先级指示器图标,例如死锁是红色叉子和等待场景是蓝色叹号。

用 Method View 揭示方法调用

  您是否遇到过这样的情况:并行堆栈包含大量的帧,这使得专注于与您的分析相关的特定方法变得具有挑战性?那么,Parallel Stack 的 Method View 可能是您的救星,这个有价值但鲜为人知的特性揭示了调用者-被调用者关系,使您能够释放这个窗口的全部潜力。

  只需选择方法开关,您将看到一个浓缩的堆栈,根据您对所选方法的特定兴趣进行定制。要访问该视图,请单击并行堆栈窗口顶部菜单中的小“Method View”开关。

  选中后,Parallel Stack 将显示方法视图。要恢复到 Tasks 视图,只需再次单击 Methods 按钮。

270073-20230806211832143-2126899592.gif

  最后,看看我们团队制作的精彩视频教程!他们将逐步引导您了解如何在 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/

270073-20230806211902510-343716042.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK