2009-01-08 10 views
36

Quando si scrivono plug-in per media center, il proprio plug-in è ospitato in e non è possibile avviarlo direttamente, ma si passa un parametro speciale a ehshell.exe. che avvierà il plugin in un processo separato.Allegare a un processo figlio automaticamente in Visual Studio durante il debug

Quando si esegue il debug di media browser, trovo il processo di collegamento a un secondo processo di tipo goffa, so di Debugger.Attach e anche di alcune voci di special registry che posso utilizzare.

Entrambi questi metodi non corrispondono esattamente al mio conto. Quello che voglio è premere F5 e fare in modo che la mia attuale istanza di Visual Studio si colleghi automaticamente al processo figlio. Può essere fatto?

Se esiste un plug-in per VS che mi consente di ottenere questa funzionalità, ne sarei felice.

EDIT

ho finito per andare con la seguente macro:

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 

Inoltre, ho delineato il processo su come get this going sul mio blog.

+1

c'è un altro modo con la nuova interfaccia di Debugger2, http://www.codeplex.com/lazy/SourceControl/changeset/view/20095#307770 –

+0

C'è un vantaggio nell'utilizzo dell'interfaccia di Debugger2? –

+0

sì, invece di loop su DTE.Debugger.LocalProcesses si può solo ottenere il proc processo = debugger2.GetProcesses (trans, "") .Item (processName) –

risposta

37

Vorrei usare una macro. Ho ridefinito la mia funzione F5 da allegare al processo asp.net invece della lunga build/validate che solitamente esegue. Questo funziona abbastanza bene per me ed è davvero facile.

For Each process In DTE.Debugger.LocalProcesses 
     If (process.Name.IndexOf("aspnet_wp.exe") <> -1) Then 
      process.Attach() 
      Exit Sub 
     End If 
    Next 
+1

Grazie per il bel trucco! –

+0

Grazie uomo, ho usato questo per allegare al WebDev.WebServer e IE quando ho colpito F4 –

+2

qualche suggerimento su come fare questo in VS2012 ora che hanno rimosso le macro? – mutex

0

È possibile collegare automaticamente a un processo premendo F5, se si imposta una cosa del genere in Visual Studio:

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

avviso: Non c'è "Command" riempito come un nome del file eseguibile, e " Allegare "deve essere" sì "

+0

Grazie! Ma questo trucco non funziona per progetti C# non si dispone di un'opzione del genere nella lista di debug, solo l'opzione per avviare un programma esterno –

+0

Credo di sapere cosa vuoi dire ... è possibile creare un progetto "fittizio" C++ e aggiungilo alla tua soluzione. Fintanto che collega in cima un eseguibile corretto, sei bravo a eseguire il debug. – galets

11

Controllare il plug-in VisualStudio che ho scritto, denominato Lazy.

+0

+1 sarà provare e vedere come vado –

+0

grazie, ho scritto quando ho uno scenario simile come la tua, il mio processo è stato invocato da un altro processo e avevo bisogno di eseguire il debug l'inizializzazione del mio processo in modo avevo bisogno di attaccarlo non appena inizia. Se avete domande fatemi sapere. "Funziona nella mia macchina" –

+1

bel plugin - grazie! –

14

Per VS2012, le macro sono state eliminate, ma è comunque possibile farlo abbastanza rapidamente con le scorciatoie da tastiera standard. Per esempio, per allegare al iisexpress.exe:

Ctrl +Alt +p - porta in primo piano il dialogo Attach to Process

i - salta alla il primo processo che inizia con i nella lista (per me questo è iisexpress.exe)

Inserisci - attacca

Per la super velocità, è possibile anche Turn off Visual Studio Attach security warning when debugging IIS.

+2

Fantastico! Mi chiedo perché non è indicato nel menu. – Bora

2

ero il debug di un plug-in C++ in un processo generato esternamente che si è schiantato lanciando un'eccezione all'avvio e questo ha funzionato perfettamente per me:

Aggiungere la libera Reattach Extension for Visual Studio. Chiedigli di ricollegarsi al nome del processo prima che venga lanciato.Apparirà una finestra di dialogo modale che dice che è in attesa del lancio del nome del processo.

Ora avviare il processo e il debugger di Visual Studio verrà collegato immediatamente, rilevando eccezioni e raggiungendo i punti di interruzione.

(questo è stato anche in un plugin multimediale, l'eccezione è stata normalmente catturato e rilanciati dal processo host in un contesto Delphi quindi avevo bisogno di rompere prima che ciò accadesse).

Problemi correlati