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

时间:2018-02-15 15:50:43

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

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

  

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

VS Diagnostic Tools Window Screenshot

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

testhost.exe 分离无济于事。

8 个答案:

答案 0 :(得分:5)

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

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

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

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

enter image description here

当前流程标有黄色箭头。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

该线程有点旧,但是我找到了解决方法。

调试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调试器时,它可能不会杀死分离的进程,您可能需要使用进程资源管理器或其他工具手动将其杀死。

答案 4 :(得分:0)

不是100%的解决方案,但是仅在您对CPU使用情况分析感兴趣时才可用:

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

enter image description here

答案 5 :(得分:0)

最后,在我提出原始问题的两年之后,Visual Studio 2019 16.5似乎可以解决此问题。

现在, QTAgent.exe 不再出现在“进程”窗口中,并且似乎不再使用。现在只有一个 testhost.exe 进程正在执行单元测试。因此, 诊断工具窗口现在可以正确显示单元测试的内存和CPU使用情况,这是我在原始问题中试图实现的目标。

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

答案 6 :(得分:0)

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

(与VS 16.5.4兼容)

答案 7 :(得分:0)

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

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

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

已向Microsoft报告为https://www.onthehouse.com.au/property-for-rent/vic/aspendale-gardens-3195,这似乎是测试工具团队积极开发的领域。