Se fixer à un processus enfant automatiquement dans Visual Studio pendant le débogage

lors de l'écriture de plugins pour media center votre plugin est hébergé dans ehexthost.exe cet exe est lancé à partir de ehshell.exe et vous n'avez aucun moyen de le lancer directement, à la place vous passez un param spécial à ehshell.exe qui lancera le plugin dans un processus séparé.

quand nous déboguons Media browser je trouve que le processus de fixation à un deuxième processus sorte de clunky, je sais À propos du Débogueur.Joindre et aussi de certains registre spécial entrées que je peux utiliser.

ces deux méthodes ne correspondent pas exactement à ma facture. Ce que je veux c'est Appuyer sur F5 et avoir mon instance actuelle de visual studio attachée au processus enfant automatiquement. Cela peut-il être fait?

S'il y a un plugin pour VS qui me permet d'atteindre cette fonctionnalité, je m'en contenterai.

MODIFIER

j'ai fini par aller avec le macro suivante:

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

aussi, j'ai souligné le processus sur la façon de obtenir ce va sur mon blog.

36
demandé sur Robert 2009-01-08 03:30:30

5 réponses

j'utiliserais une macro. J'ai redéfini ma fonction F5 pour l'attacher à la asp.net processus au lieu de la construction/validation longue il exécute habituellement. Cela fonctionne assez bien pour moi et c'est vraiment facile.

    For Each process In DTE.Debugger.LocalProcesses
        If (process.Name.IndexOf("aspnet_wp.exe") <> -1) Then
            process.Attach()
            Exit Sub
        End If
    Next
38
répondu Jab 2009-01-27 15:19:19

pour VS2012, les macros ont été supprimées, mais vous pouvez encore le faire assez rapidement avec des raccourcis clavier standard. Par exemple, attacher à iisexpress.exe:

Ctrl + Alt + p - ouvre l'Attacher Au Processus de dialogue

je , accède à la le premier processus commençant par i dans la liste (pour moi, c'est iisexpress.exe) 151910920"

entrer - attaches

pour super speed, vous pouvez aussi désactiver Visual Studio Attach Security warning lors du débogage de IIS .

14
répondu Mike Chamberlain 2017-05-23 12:26:13

regardez le plugin VisualStudio que j'ai écrit, nommé Lazy .

11
répondu Pablo Retyk 2014-06-23 16:33:26

Je déboguais un plugin C++ dans un processus externe qui s'est écrasé en lançant une exception au démarrage et cela a fonctionné parfaitement pour moi:

Ajoutez gratuitement Rattacher Extension pour Visual Studio . Demandez - lui de rattacher à nouveau le nom du processus avant de le lancer. Il affichera un dialogue modal disant qu'il attend que le nom du processus soit lancé.

lance maintenant le processus et le débogueur Visual Studio attachera immédiatement, en attrapant les exceptions et en frappant les points d'arrêt.

(c'était aussi dans un plugin média, l'exception était normalement attrapée et réarrangée par le processus hôte dans un contexte Delphi donc j'avais besoin de casser avant que cela ne se produise).

2
répondu mstrange 2014-10-15 17:34:31

vous pouvez automatiquement vous attacher à un processus en appuyant sur F5, si vous configurez quelque chose comme cela dans visual studio:

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

notice: il y a une commande remplie comme nom exécutable, et "Attach" doit être " yes "

0
répondu galets 2009-01-08 00:51:47