2010-11-09 17 views
7

Sto provando a eseguire il debug in remoto di un programma C#. La connessione all'host non è un problema e posso vedere tutti i processi in esecuzione su quella macchina, e posso connettermi allo msvsmon.exe.Debug di un eseguibile C# che si arresta in modo anomalo all'avvio

Tuttavia, il programma che desidero eseguire il debug si blocca immediatamente al momento del lancio, non dandomi il tempo di assegnarmi. Anche l'avvio dell'eseguibile di debug in questione attraverso una posizione remota non fa nulla. Come posso collegare un debugger prima del crash?

risposta

10

Lo schianto all'avvio potrebbe essere dovuto a una dipendenza mancante. Eseguire fuslogvw.exe prima di avviare l'applicazione e vedere se una delle operazioni di bind non riesce.

Se ciò non aiuta, è generalmente buona norma disporre di registrazione diagnostica. Puoi utilizzare una libreria di registrazione dedicata, ad es. log4net, o almeno dovresti usare la forma più semplice di registrazione via System.Diagnostics.Trace. È possibile ascoltare i messaggi di traccia configurando un listener di traccia in app.config o utilizzando strumenti di terze parti come un debugger o DebugView da Sysinternals.

Se si vuole realmente collegare un debugger è possibile inserire un punto di interruzione di programmazione:

System.Diagnostics.Debugger.Break(); 

non ho controllato come funziona con un debugger remoto, ma come ultima risorsa si può avere il vostro sonno applicazione abbastanza a lungo da permettere di collegare un debugger:

System.Threading.Thread.Sleep(30000); 
+0

+1 DebugView è uno dei miei strumenti preferiti. – kenny

0

alla fine, dopo tanto scavare intorno mi sono reso conto WPF è stata la causa del problema. Il blog di Rudsen rivela il answer.

Nel registro dell'applicazione sarebbe il seguente errore;

NET runtime 4.0 Segnalazione errori

EventType clr20r3, P1 eobfrontend.exe, P2 1.0.0.0, P3 4cd95cc7, P4 PresentationFramework, P5 4.0.0.0, P6 4ba1f8db, P7 78ff, P8 0, sistema P9. windows.markup.xamlparse, P10 NIL.

Realizzato come Rudsen ha rilevato "che l'errore indica che si è verificato un errore di runtime durante l'analisi del codice xaml". Seguo la procedura descritta "Apri debug> Eccezioni e attiva la casella di controllo nella colonna" generata "per" Eccezioni Common Language Runtime ". Fatto così, Visual Studio si fermerà su tutte le eccezioni."

13

Uno dei miei trucchi preferiti per collegare un debugger all'avvio del programma è l'utilizzo di Image File Execution Options. È una funzionalità di registro che consente, tra le altre cose, di collegare un debugger a un'applicazione prima della sua esecuzione. Lo stesso trucco consente, ad esempio, di sostituire il Task Manager di Windows con Process Explorer o Notepad.exe con Notepad2.

È possibile leggere tutto su di esso here.

Ecco come lo si imposta:

  • Run regedit.exe
  • Vai HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • Creare una nuova chiave denominata come exe (ad esempio: yourprogram.exe)
  • Creare un nuovo valore di stringa sotto il tuo exe. Il nome del valore di stringa è Debugger, e il valore è vsjitdebugger.exe

Quando si esegue il file eseguibile, si vedrà il Just In pronta Tempo che chiede di selezionare un debugger:

vsjitdebugger

Mentre questa finestra di dialogo è aperta, collegala in remoto al processo e premi No nella finestra di dialogo.

Spero che questo aiuti.

+1

Crickey, questo è piuttosto utile. Non sapevo che questo poteva essere fatto. – wonea

+1

GFlags è uno strumento gratuito di Microsoft che imposterà questa opzione nel Registro di sistema, oltre a molte altre utili opzioni di debug. È disponibile gratuitamente all'indirizzo http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx Vale la pena utilizzarlo quando è necessario impostare un debugger per eseguire ogni volta che un programma o un servizio viene eseguito su un sistema. – StarPilot

Problemi correlati