Attach Debugger to multiple processes via powershe

2019-05-29 08:01发布

问题:

I have several processes running that I'd like to attach to the VS debugger via powershell.

Currently, I can do this: Get-Process NServiceBus.Host | Debug-Process

If there is only one process, then I am prompted to select the correct debugger and I can continue.

However, if there are more than one processes, when I'm prompted to select a debugger for the second process, I am unable to select the currently running instance of Visual Studio.

How can I use powershell to attach multiple processes to a running instance of visual studio for debuggin?

回答1:

To get hold of the active visual studio instance ...

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

... and to make it attach to a set of processes ...

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

... it seems that a delay might be necessary between each attach if it takes too long otherwise visual studio is busy and rejects the call.



回答2:

Thanks, softwarebear. I was not able to get your exact command line working, but after adding curly brackets and running at an Administrator Powershell prompt, this command line successfully attached the debugger to all the running w3wp.exe processes:

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

Ideally this could be executed from within Visual Studio with a keystroke, but Visual Studio doesn't support Powershell without an add-in, and the Macro editor was removed after VS2010. Following this advice I tried adding this ScriptBlock as an 'External Tool' in a powershell.exe command line, but it didn't attach the debugger and produced no output.