在调试期间在Visual Studio中自动附加到子进程
-
05-07-2019 - |
题
在为媒体中心编写插件时,您的插件托管在 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
注意:有“命令”填写为可执行文件名称,并“附加”必须是“是”