2008-12-31 6 views
8

Ich bin ein wenig verwirrt darüber, wie die .NET Trace und Debug-Klassen zu verwenden.Trace und Debug-Anweisungen

Warum sollten Sie Trace anstelle von Debug verwenden?

Trace.TraceError() 
Trace.TraceInformation() 
Trace.Assert() 

Debug.WriteLine() 
Debug.Assert() 

Auch verstehe ich, dass Debug-Anweisungen ignoriert werden, wenn der in Release-Config Mode, aber Wenn Trace-Anweisungen die ganze Zeit gelten, wie diese Leistung wirkt sich?

+0

zu diagnostizieren Mögliches Duplikat: http://stackoverflow.com/questions/179868/trace-vs-debug-in-net-bcl – user

Antwort

7

Auf der einfachsten Ebene, sie unterschiedliche Kompilation Schalter haben - das heißt Debug.WriteLine etc nur, wenn Sie die DEBUG Kompilation Symbol (nicht üblich für Release-Builds) haben umgeschaltet wird, wo-wie Trace.WriteLine wird in der Regel auch enthalten sein in Release-Builds.

Die Route Trace verfügt über anpassbare Trace-Listener, die per Konfiguration angeschlossen werden können; Debug geht im Allgemeinen als Debugger zu einem Debugger. Natürlich gibt es 3rd-Party-Trace-Systeme, die viel mehr Flexibilität bieten.

2

Sie können beide mit einem Compiler-Schalter ein- und ausschalten, wenn Sie auf die Build-Seite Ihrer Projekteigenschaften gehen, haben Sie einige Kontrollkästchen dort.

Die Faustregel für mich ist, dass ich debuggen für tatsächliche Debugging-Informationen verwenden, dh der Wert der Variable x an diesem Punkt ist ... etc, und Trace für Ablaufverfolgung der Kontrolle durch meine App (mehr Spam wie) .

2

Wie Sie sagen, Trace-Aufrufe werden nur ausgeführt, wenn Sie sich im Freigabemodus befinden. Das Kompilieren im Freigabemodus hat einige Leistungsvorteile, die Sie möglicherweise in der Endanwendung haben möchten, und es kann andere Gründe geben, den Freigabemodus zu aktivieren. Es kann jedoch vorkommen, dass Sie Informationen zur Trace-Konsole aufzeichnen möchten, die mit Anwendungen wie SysInternal's DbgView angezeigt werden können. Dies sind normalerweise Nachrichten, die Sie nicht unbedingt an eine Protokollausgabe senden möchten oder die Sie immer für Debugzwecke zur Verfügung haben möchten, selbst wenn der Benutzer die Protokollierung deaktiviert hat.

Sie möchten sicherlich nicht viele Informationen an die Trace-Konsole senden, da dies eine Leistungseinbuße nach sich zieht, aber einige wichtige Informationen könnten angebracht sein.

2

Ich neige dazu, Trace (mit einem zugehörigen TraceSwitch) für Protokollierungsbemühungen in Release-Umgebungen zu verwenden - eine schnelle Optimierung der app.config kann dann verschiedene Protokollebenen ohne die Notwendigkeit der Neukompilierung geben Problem sowieso weg) oder die Notwendigkeit, einen Debugger anzuhängen. Besonders nützlich für Probleme, die nur auf den Computern des Kunden auftreten, aus welchen Gründen auch immer - ich habe dies verwendet, um die Abmeldung aus einer FTP-Klasse (zurück in den alten Frameworks 1.1 Tage) erfolgreich zu diagnostizieren, um Netzwerkübertragungsprobleme zwischen zwei Unternehmen