Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试期间在Visual Studio中自动附加到子进程_C#_.net_Visual Studio_Debugging_Visual Studio Debugging - Fatal编程技术网

C# 调试期间在Visual Studio中自动附加到子进程

C# 调试期间在Visual Studio中自动附加到子进程,c#,.net,visual-studio,debugging,visual-studio-debugging,C#,.net,Visual Studio,Debugging,Visual Studio Debugging,为media center编写插件时,您的插件托管在ehexthost.exe中。此exe从ehshell.exe启动,您无法直接启动它,而是向ehshell.exe传递一个特殊参数,该参数将在单独的过程中启动插件 当我们调试时,我发现附加到第二个进程的过程有点笨拙,我知道Debugger.Attach以及一些我可以使用的条目 这两种方法都不完全符合我的要求。我想要的是按F5键并将我当前的visual studio实例自动附加到子进程。这能做到吗 如果有一个VS插件允许我实现这个功能,我会很高兴

为media center编写插件时,您的插件托管在
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
Public子编译器nandattachtoehxthost()
DTE.Solution.SolutionBuild.Build(True)
DTE.Solution.SolutionBuild.Debug()
Dim trd As System.Threading.Thread=新的System.Threading.Thread(附件的地址)
trd.Start()
端接头
公共子附件Ohexthost()
尺寸i为整数=0
直到i=50为止
i=i+1
尝试
对于DTE.Debugger.LocalProcesses中作为EnvDTE.Process的每个进程
如果(proc.Name.IndexOf(“ehexthost.exe”)-1),则
过程附加()
出口接头
如果结束
下一个
捕获e作为例外
“别在意——事情可能很忙
结束尝试
线程。线程。睡眠(100)
环
端接头

此外,我还概述了如何在我的博客上发布信息的过程

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


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

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

我将使用宏。我重新定义了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
DTE.Debugger.localprocesss中每个进程的

如果(process.Name.IndexOf(“aspnet_wp.exe”)-1),则
process.Attach()
出口接头
如果结束
下一个

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

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

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

输入-附加


超高速,你也可以。

< P>我在一个外部生成的进程中调试C++插件,在启动时抛出异常,这对我来说是完美的:

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

现在启动该进程,VisualStudio调试器将立即连接,捕获异常并命中断点


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

谢谢!但是这个技巧不适用于C#项目你在调试列表中没有这样的选项,只有启动外部程序的选项我想我知道你的意思。。。您可以创建一个“哑”C++项目并将其添加到解决方案中。只要它附加了一个正确的可执行文件,您就可以调试了。谢谢,我在遇到类似于您的场景时编写了它,我的进程被其他进程调用,我需要调试进程的初始化,所以我需要在它启动时立即附加它。如果你有任何问题,请告诉我。“它在我的机器上工作”在我安装它之后,它只在VS2008中出现,而不是在VS2010中出现。嘿@pablito,你有没有计划将你的插件移植到VS2010/2012+?很长时间没有更新它了,但由于一些人似乎感兴趣,我很快就会将它移植到VS2010/12。新的Debugger2接口还有其他方法,使用Debugger2接口有好处吗?是的,不用在DTE.Debugger.LocalProcesses上循环,你只需要得到进程proc=Debugger2.GetProcesses(trans,“”)。项(进程名)我的VB已经生锈了-我得到了“Name'proc'没有声明”-关于需要修复什么的想法?弄明白了。应该是这样的:对于DTE.Debugger.LocalProcessTestHanks man中作为EnvDTE.Process的每个进程,当我点击F4时,我用它连接到WebDev.WebServer和IE。在VS2012中删除了宏之后,有什么建议吗?实际上你不必再这样做了!至少不是因为我需要它。他们在project->web设置下为web项目添加了一个新选项“不要打开页面。等待外部应用程序的请求”。但是,如果我需要附加到一个非web进程,我不知道该如何做。很抱歉