在为媒体中心编写插件时,您的插件托管在 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

另外,我概述了如何在我的博客上开始这个

有帮助吗?

解决方案

我会用一个宏。我重新定义了我的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

其他提示

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

Ctrl + Alt + p - 显示“附加到流程”对话框

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

输入 - 附加

对于超高速,您还可以关闭Visual Studio在调试IIS时附加安全警告

查看我编写的VisualStudio插件,名为懒惰

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

添加免费的重新附加Visual Studio扩展程序。要求它在启动之前重新连接到进程名称。它会弹出一个模态对话框,说它正在等待进程名称启动。

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

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

如果在visual studio中设置类似的内容,可以按F5自动附加到进程:

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

注意:有“命令”填写为可执行文件名称,并“附加”必须是“是”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top