繁体   English   中英

如何在 Visual Studio 诊断工具窗口中切换进程?

[英]How to switch process in Visual Studio Diagnostic Tools Window?

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

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

VS 诊断工具窗口截图

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

testhost.exe分离没有帮助。

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

在调试位置工具栏上,选择进程以查看进程列表框。 选择要指定为当前进程的进程。 在此处输入图片说明

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

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

在此处输入图片说明

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

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

这个线程有点旧,但我找到了一个解决方法。

在调试 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 调试器时,它可能不会终止分离的进程,您可能需要使用进程资源管理器或其他东西手动终止它。

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

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

在此处输入图片说明

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

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

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

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

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

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

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

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

(与 VS 16.5.4 一起使用)

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

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

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

向 Microsoft 报告了一个问题,它似乎是测试工具团队正在积极开发的一个领域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM