2009-01-08 90 views
36

为媒体中心编写插件时,您的插件托管在ehexthost.exe该exe从ehshell.exe启动,您无法直接启动它,而是将特殊参数传递给ehshell.exe这将在一个单独的过程中启动插件。在调试过程中在Visual Studio中自动附加到子进程

当我们正在调试media browser我发现附加到第二个过程种类笨重的过程,我知道有关Debugger.Attach和我可以使用的一些special registry条目。

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

如果有一个VS插件允许我实现这个功能,我会很高兴。

编辑

我结束了下面的宏会:

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 

另外,我概述了如何get this going过程在我的博客。

+1

还有其他方式使用新的Debugger2接口,http://www.codeplex.com/lazy/SourceControl/changeset/view/20095#307770 – 2009-01-28 07:15:27

+0

使用Debugger2接口有什么优势吗? – 2009-01-28 22:34:50

+0

是的,而不是在DTE.Debugger.LocalProcesses上循环,你可以得到的进程proc = debugger2.GetProcesses(trans,“”).Item(processName) – 2009-01-29 11:40:34

回答

37

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

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

您可以按F5自动附加到一个进程,如果你设置类似的东西在Visual Studio:

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

通知:有“命令”填补了作为一个可执行文件的名称,而“附加“必须是”是“

11

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

14

对于VS2012,宏已被删除,但您仍然可以使用标准键盘快捷键相当快速地执行此操作。例如,要附加到iisexpress.exe:

按Ctrl + Alt键+p - 带来了附加到进程对话框

- 跳到第一个过程与我开始在列表中(对我来说这是iisexpress.exe)

输入 - 重视

对于超高速,你也可以Turn off Visual Studio Attach security warning when debugging IIS

2

我是在外部产生的进程,坠毁在启动时抛出一个异常,这工作完全为我调试C++插件:

添加免费Reattach Extension for Visual Studio。要求它在启动之前重新附加进程名称。它会弹出一个模态对话框,表示它正在等待进程名称启动。

现在启动该进程,Visual Studio调试器将立即连接,捕获异常并触发断点。

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

相关问题