8 Stimmen

Trace- und Debug-Anweisungen

Im ein wenig verwirrt über, wie die .NET Trace und Debug-Klassen zu verwenden.

Warum sollten Sie Trace anstelle von Debug verwenden?

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

Debug.WriteLine()
Debug.Assert()

Außerdem verstehe ich, dass Debug-Anweisungen ignoriert werden, wenn Ihr in Release Config-Modus, aber wenn Trace-Anweisungen gelten die ganze Zeit, wie wirkt sich dies auf die Leistung?

8voto

Marc Gravell Punkte 970173

Auf der einfachsten Ebene haben sie unterschiedliche Kompilierungsschalter - d.h. Debug.WriteLine usw. wird nur dann umgeschaltet, wenn Sie die DEBUG Kompilierungssymbol (nicht üblich für Release-Builds), während Trace.WriteLine sind normalerweise auch in Release-Builds enthalten.

Le site Trace route hat anpassbare Trace-Listener, die über die Konfiguration eingebunden werden können; Debug geht im Allgemeinen an einen Debugger als Hörer. Natürlich gibt es Trace-Systeme von Drittanbietern, die viel mehr Flexibilität bieten.

2voto

Tim Jarvis Punkte 17605

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

Die Faustregel für mich ist, dass ich Debug für tatsächliche Debugging-Informationen verwenden, d.h. der Wert der Variable x an dieser Stelle ist ... usw., und Trace für die Verfolgung des Kontrollflusses durch meine App (mehr Spam wie).

2voto

Michael Bray Punkte 14660

Wie Sie sagen, werden Trace-Aufrufe nur ausgeführt, wenn Sie sich im Freigabemodus befinden. Das Kompilieren im Freigabemodus hat einige Leistungsvorteile, die Sie vielleicht in der Endanwendung wünschen, und es kann andere Gründe geben, warum Sie den Freigabemodus einschalten wollen. Es kann jedoch vorkommen, dass Sie Informationen in der Trace-Konsole aufzeichnen möchten, die mit Anwendungen wie DbgView von SysInternal . Dabei handelt es sich in der Regel um Meldungen, die Sie nicht unbedingt an eine Protokollausgabe senden wollen oder die Sie zu Debugging-Zwecken immer verfügbar haben wollen, auch wenn der Benutzer die Protokollierung ausgeschaltet hat.

Sie möchten sicher nicht viele Informationen an die Trace-Konsole senden, da dies zu Leistungseinbußen führt, aber einige kritische Informationen können durchaus sinnvoll sein.

2voto

Rowland Shaw Punkte 37027

Ich neige dazu, Trace (mit einem zugehörigen TraceSwitch) für die Protokollierung in Release-Umgebungen zu verwenden - eine schnelle Änderung der app.config kann dann verschiedene Protokollierungsebenen bereitstellen, ohne dass eine Neukompilierung erforderlich ist (wodurch ein Problem möglicherweise sowieso verschwindet) oder ein Debugger angeschlossen werden muss. Besonders praktisch für Probleme, die aus welchen Gründen auch immer nur auf den Rechnern des Kunden auftreten -- ich habe dies verwendet, um erfolgreich Logging aus einer FTP-Klasse auszulagern (damals in den alten Framework 1.1 Tagen), um bei der Diagnose von Netzwerkübertragungsproblemen zwischen zwei Unternehmen zu helfen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X