通过PowerShell将调试器连接到多个进程

时间:2015-02-23 21:06:32

标签: visual-studio debugging powershell visual-studio-2013 powershell-v4.0

我有几个进程正在运行,我想通过powershell连接到VS调试器。

目前,我可以这样做:Get-Process NServiceBus.Host | Debug-Process

如果只有一个进程,则提示我选择正确的调试器,然后我可以继续。

但是,如果有多个进程,当系统提示我为第二个进程选择调试器时,我无法选择当前正在运行的Visual Studio实例。

如何使用powershell将多个进程附加到正在运行的visual studio实例以进行调试?

2 个答案:

答案 0 :(得分:5)

获取活动的visual studio实例...

$ dte = [System.Runtime.InteropServices.Marshal] :: GetActiveObject(" VisualStudio.DTE")

...并使其附加到一组进程......

($ dte.debugger.localprocesses | Where Name -Match" proc(one | two).exe")。Attach()

......似乎每次连接之间可能需要延迟,如果它需要太长时间,否则视觉工作室很忙并拒绝接听电话。

答案 1 :(得分:0)

谢谢,软件熊。我无法使您的确切命令行正常工作,但是在添加大括号并在Administrator Powershell提示符下运行后,此命令行已将调试器成功附加到所有正在运行的w3wp.exe进程:

$dte = [System.Runtime.InteropServices.Marshal]::GetActiveObject('VisualStudio.DTE')
$dte.Debugger.LocalProcesses | Where {$_.Name -like '*w3wp.exe'} | %{$_.Attach()}

理想情况下,这可以在Visual Studio中通过按键执行,但是Visual Studio在没有插件的情况下不支持Powershell,并且在VS2010之后删除了Macro编辑器。在this advice之后,我尝试将此ScriptBlock作为“外部工具”添加到powershell.exe命令行中,但是它没有附加调试器,也没有产生任何输出。