【问题标题】:How to switch process in Visual Studio Diagnostic Tools Window?如何在 Visual Studio 诊断工具窗口中切换进程?
【发布时间】:2018-02-15 15:50:43
【问题描述】:

在 Visual Studio 2017 中,我想使用 诊断工具 窗口来分析我用 C# 编写的单元测试 (x64)。但是它总是显示消息

已调试多个进程。此窗口仅显示 testhost.exe (PID: xxxxx) 的数据。

testhost.exe 对我没有多大帮助,我需要 QTAgent.exe。我可以在“进程”窗口中看到调试器已附加到两个进程,QTAgent.exetesthost.exe。但我找不到如何在诊断工具窗口中切换到 QTAgent.exe 的方法。你怎么能这样做?

testhost.exe 中分离 没有帮助。

【问题讨论】:

  • testhost.exe 是测试运行者。 qtagent.exe负载测试器。为什么首先要调试它们?他们做什么并不重要,他们不是您的应用程序或网站。您是否正在寻找性能分析器?
  • 我不想调试我的应用程序,而是我的单元测试。而且我想分析我的单元测试的内存消耗,这就是我想使用诊断工具窗口的原因。当我运行单元测试并在代码中放置一个断点并且调试器停止时,它始终是处于活动状态的QTAgent.exe 进程。

标签: c# visual-studio visual-studio-2017


【解决方案1】:

在任何给定时间,调试器中只有一个进程处于活动状态。您可以在“调试位置”工具栏或“进程”窗口中设置活动或当前进程。要在进程之间切换,两个进程都必须处于中断模式。

在“调试位置”工具栏上,选择“进程”以查看“进程”列表框。选择要指定为当前进程的进程。

如果“调试位置”工具栏不可见,请选择“工具”、“自定义”。在“工具栏”选项卡上,选择“调试位置”。

打开进程窗口(快捷键Ctrl+Alt+Z),找到要设置为当前进程的进程,双击。

当前进程用黄色箭头标记。

切换到项目会将其设置为当前进程以进行调试。您查看的任何调试器窗口都将显示当前进程的状态,并且所有单步执行命令仅影响当前进程。

【讨论】:

  • 我想你误解了我的问题。我的问题是如何在诊断工具窗口 中切换进程。如您所述,在调试器中切换活动进程不会更改“诊断工具”窗口中显示的进程。至少在我的 VS 中没有。它对你有用吗?
  • @Tobias 这个答案是正确的。您无需在诊断窗口中切换任何内容 - 它只是一个显示来自被调试会话的诊断数据的窗口。您在 调试器 中切换进程。顺便说一句,你为什么要调试 test runner
  • @PanagiotisKanavos 另请参阅我在上述问题下的评论。所以如果答案是正确的,请告诉我如何让诊断工具窗口显示 QTAgent.exe 的数据。也许我不明白,你可以给我一步一步的指导吗?问题是当我调试单元测试时,QTAgent.exe 是调试器中的活动进程,但testhost.exe 是诊断工具中显示的进程。而且我无法更改后一个。
【解决方案2】:

不是 100% 的解决方案,但如果您只对 CPU 使用情况分析感兴趣,则可以使用:

  1. 调试时禁用诊断工具(选项 -> 调试或直接搜索“诊断”)
  2. 在单元测试的第一行代码中设置断点。
  3. 打开“Performance Profiler”(ALT+F2)并附加到“QTAgent32.exe”
  4. 继续调试 (F5)
  5. 检查 CPU 时间的去向:

【讨论】:

  • 感谢您的提示。我对此进行了测试并且它有效,但是当我发布我对内存使用而不是 CPU 使用感兴趣的问题时。不幸的是,当使用 Performance Profiler 附加到正在运行的进程时,它只能让您分析 CPU 和 GPU 的使用情况,而不能分析内存。
【解决方案3】:

这个帖子有点老了,但我找到了解决方法。

在调试 Azure WebRole 时,我需要查看 iisexpress.exe 进程的诊断,但诊断工具显示的是 WaIISHost.exe 进程的数据。

这就是我所做的:

1- 在 Visual Studio 上调试我的 WebRole 时打开进程窗口 (Ctrl+Alt+Z)。

2- 在“进程”窗口中,我右键单击 iisexpress.exe 并选择“分离进程”。

3- 打开第二个 Visual Studio 并打开我在第一个上运行的相同解决方案。

4- 进入菜单“调试/附加到进程”。

5- 从正在运行的进程中选择 iisexpress.exe,然后我终于看到了 iisexpress.exe 的数据

注意:如果您不从第一个 Visual Studio 上的目标进程分离,那么您的第二个 Visual Studio 将不允许您附加到它,因为它会抱怨在同一进程上已经有一个调试会话。

注意 2:分离的进程可能是孤立的,这意味着当您停止 Visual Studio 调试器时,它可能不会终止分离的进程,您可能需要使用进程资源管理器或其他工具手动终止它。

【讨论】:

  • 感谢您的回答,欢迎来到 StackOverflow!虽然这个线程很老,但仍然没有解决方案。不幸的是,您的回答对我没有帮助,我的问题有所不同。我无法从 QTAgent.exe 分离,这是我需要的过程,因为在我能够将第二个 VS 附加到该进程之前,单元测试将运行完成。单元测试非常短暂,而您的 iisexpress.exe 始终在运行。
  • 澄清 Tobias 的评论:我们可以分离“QTAgent.exe”,但我们这样做的实例,它将继续执行。因此,如果测试在我们附加第二个调试器时完成。但是,如果测试真的很长,那么这个解决方案就可以了。
【解决方案4】:

切换当前进程对我没有帮助。

根据我的经验,诊断工具窗口附加到正在调试的第一个进程。我能够在解决方案属性窗口中更改项目在我的解决方案中的启动顺序,您可以在其中选择多个启动项目(通用属性>>启动项目)。然后,我使用右侧的向上和向下箭头将我希望“诊断工具”窗口附加到的项目移动到此列表的顶部,使其首先启动。

【讨论】:

    【解决方案5】:

    部分解决方案(仅针对一个项目):

    1. 在解决方案属性 > 启动项目中
    2. 在多个启动项目下
    3. 将您要诊断的项目重新排序为第一个项目(使用向上和向下箭头)

    【讨论】:

      【解决方案6】:

      最后,在我最初提出问题两年后,Visual Studio 2019 16.5 似乎解决了这个问题。

      现在 QTAgent.exe 不再出现在“进程”窗口中,并且似乎不再使用。现在只有 testhost.exe 进程正在执行单元测试。因此,Diagnostic Tools 窗口现在可以正确显示单元测试的内存和 CPU 使用率,这是我在原始问题中尝试实现的。

      确切地说,我帖子标题中的原始问题没有解决,但至少在我的情况下,我不再需要切换过程,因为 诊断工具 窗口现在可以正常工作了用于单元测试的盒子。

      【讨论】:

      • 无法在我的 16.5.4 解决方案上确认这一点
      • 为我显示错误进程的诊断 VS 2019 16.1.1 猜我会升级,看看现在是否解决了 16.7.7。
      • Nope 仍然显示与我想要分析内存和 cpu 的进程不同的进程。
      • @LiamMitchell 我不记得这是否有区别,但我的测试是在 64 位模式下运行的。
      • 我可以切换某处使用的进程,但似乎没有生效。最后一次只运行一个和两个视觉工作室....
      【解决方案7】:

      我找到了解决此问题的方法:
      在测试开始时使用System.Threading.Thread.Sleep(15000); 延迟。在睡眠前设置断点并在调试模式下运行测试。到达断点时,分离调试器并在 Thread.Sleep 的给定中断中附加到 QTAgent.exe。 就我而言,我遇到了一个例外,还必须执行以下操作:
      禁用工具->选项设置“调试->常规-> 启用属性评估和其他隐式函数调用"

      (使用 VS 16.5.4)

      【讨论】:

        【解决方案8】:

        我刚刚在 VS2019 16.6.1 上遇到了这个问题,并且有一个对我来说有效的解决方法。如果我尝试通过测试资源管理器中的任何内容或通过 DebugTests 下拉选项调试测试,则诊断工具窗口将附加到 testhost.exe 而不是测试可执行文件,而且这个窗口会忽略进程选择栏。

        我的解决方案是选择生成测试可执行文件的项目,然后从解决方案资源管理器下的下拉菜单中选择 Debug->StartNewInstance。以这种方式启动进程仅在调试窗口的进程选项卡中显示我的测试可执行文件,并且诊断工具窗口不显示任何警告。

        这里的区别似乎是通过测试资源管理器启动调试器意味着 Visual Studio 通过测试主机知道您的测试,但直接调试项目就像附加到任何正常的可执行文件一样。这里的缺点是,如果您的测试套件很大,并且您有一个特定的测试要分析,那么您可能要等待很长时间才能到达相关部分。

        已向 Microsoft 报告为 issue,它似乎是测试工具团队积极开发的一个领域。

        【讨论】:

          猜你喜欢
          • 2017-05-18
          • 2016-01-13
          • 2017-12-24
          • 2017-08-04
          • 1970-01-01
          • 2023-01-11
          • 2021-02-27
          • 2017-01-07
          • 1970-01-01
          相关资源
          最近更新 更多