36

为媒体中心编写插件时,您的插件托管在ehexthost.exe此 exe 中ehshell.exe,您无法直接启动它,而是传递一个特殊参数,ehshell.exe该参数将在单独的进程中启动插件。

当我们调试媒体浏览器时,我发现附加到第二个进程的过程有点笨拙,我知道 Debugger.Attach 以及我可以使用的一些特殊注册表项。

这两种方法都不完全符合我的要求。我想要的是按 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

另外,我在我的博客 上概述了如何实现这一点的过程。

4

5 回答 5

38

我会使用宏。我重新定义了我的 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
于 2009-01-27T15:19:19.220 回答
14

对于 VS2012,宏已被删除,但您仍然可以使用标准键盘快捷键快速完成。例如,要附加到 iisexpress.exe:

Ctrl+ Alt+ p- 显示附加到进程对话框

i- 跳转到列表中以 i 开头的第一个进程(对我来说这是 iisexpress.exe)

Enter- 附上

为了超级速度,您还可以在调试 IIS 时关闭 Visual Studio 附加安全警告

于 2013-11-26T02:49:27.003 回答
11

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

于 2009-01-27T11:26:09.113 回答
2

我在一个外部生成的进程中调试了一个 C++ 插件,该进程在启动时抛出异常而崩溃,这对我来说非常有效:

添加免费的Reattach Extension for Visual Studio。要求它在启动之前重新附加到进程名称。它将弹出一个模式对话框,说明它正在等待进程名称启动。

现在启动该进程,Visual Studio 调试器将立即附加,捕获异常并命中断点。

(这也在媒体插件中,异常通常在 Delphi 上下文中被主机进程捕获并重新抛出,因此我需要在此之前中断)。

于 2014-10-15T17:34:31.727 回答
0

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

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

注意:“Command”填写为可执行文件名,“Attach”必须为“yes”

于 2009-01-08T00:51:47.153 回答