c# - visual studio断点窗口




在调试期间在Visual Studio中自动附加到子进程 (4)

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

另外,我概述了如何在我的博客上进行操作的过程。


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

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


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

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

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

输入 - 附加

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


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

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

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

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


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







visual-studio-debugging