在debugging过程中,在Visual Studio中自动附加到subprocess

当为媒体中心编写插件时,你的插件被托pipe在ehexthost.exe这个exe从ehshell.exe启动,你无法直接启动它,而是传递一个特殊的参数给ehshell.exe ,这个特殊的参数将在单独启动插件处理。

当我们正在debugging媒体浏览器时,我发现附加到第二个过程种类笨重的过程中,我知道有关Debugger.Attach以及我可以使用的一些特殊的registry项。

这两种方法都不完全适合我的账单。 我想要的是按F5,并将我当前的Visual Studio实例自动附加到subprocess。 可以这样做吗?

如果有一个VS的插件,可以让我实现这个function,我会很高兴。

编辑

我结束了与下面的macros:

 Public Sub CompileRunAndAttachToEhExtHost() DTE.Solution.SolutionBuild.Build(True) DTE.Solution.SolutionBuild.Debug() Dim trd As System.Threading.Thread = New System.Threading.Thread(AddressOf AttachToEhExtHost) trd.Start() End Sub Public Sub AttachToEhExtHost() Dim i As Integer = 0 Do Until i = 50 i = i + 1 Try For Each proc As EnvDTE.Process In DTE.Debugger.LocalProcesses If (proc.Name.IndexOf("ehexthost.exe") <> -1) Then proc.Attach() Exit Sub End If Next Catch e As Exception ' dont care - stuff may be busy End Try Threading.Thread.Sleep(100) Loop End Sub 

另外,我还概述了如何在博客上发布这个过程。

我会用一个macros。 我已经重新定义了我的F5函数来附加到asp.net进程,而不是通常执行的长期生成/validation。 这对我来说很好,而且非常简单。

  For Each process In DTE.Debugger.LocalProcesses If (process.Name.IndexOf("aspnet_wp.exe") <> -1) Then process.Attach() Exit Sub End If Next 

对于VS2012,macros已经被删除了,但是你仍然可以用标准的键盘快捷键很快地完成。 例如,要附加到iisexpress.exe:

Ctrl + Alt + p – 打开“附加到进程”对话框

跳转到列表中的第一个进程(对于我来说这是iisexpress.exe)

input – 附件

对于超级速度,您还可以在debuggingIIS时closuresVisual Studio Attach安全警告 。

查看我写的名为Lazy的VisualStudio插件。

我正在debugging一个外部产生的进程中的C ++插件,这个进程在启动时抛出一个exception而崩溃,这对我来说非常合适:

为Visual Studio添加免费的Reattach扩展 。 请在启动之前重新附加进程名称。 它会popup一个模式对话框,说它正在等待进程名称启动。

现在启动该进程,Visual Studiodebugging器将立即连接,捕获exception并触发断点。

(这也是一个媒体插件,这个例外通常是在Delphi环境中被主机进程捕获和重新抛出的,所以我需要在发生这种情况之前打破这个例外)。

如果您在Visual Studio中设置了类似的function,您可以通过按F5自动附加到进程:

http://vvcap.net/db/ujYL7zeN_n_RgeprqCSM.htp

注意:有一个“命令”填充为可执行文件名,“附加”必须是“是”