Frage

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

Warum würden Sie Trace statt Debug plagen mit?

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

Debug.WriteLine()
Debug.Assert()

Auch ich verstehe, dass Debug-Anweisungen ignoriert werden, wenn die in Release-Config Mode, aber Wenn Trace-Anweisungen des ganze Zeit gelten, wie diese Leistung nicht beeinträchtigt?

War es hilfreich?

Lösung

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

Die Trace Route verfügt über anpassbare Trace-Hörer, die über Konfiguration plombiert in werden können; Debug geht in der Regel an einen Debugger als Zuhörer. Natürlich gibt es 3rd-Party-Trace-Systeme, die viel mehr Flexibilität bieten.

Andere Tipps

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

Als Faustregel für mich ist, dass ich Debug für tatsächliche Debug-Informationen, dh den Wert der Variablen x an diesem Punkt ist ... etc, und Trace für Ablauf der Steuerung durch meine app (wie mehr Spam) zu verfolgen.

Wie Sie sagen, Trace Anrufe werden nur dann ausgeführt, wenn Sie im Release-Modus sind. Kompilieren in Release-Modus hat einige Performance-Vorteile, die Sie in der Endanwendung wünschen können, und es können auch andere Gründe geben Sie auf Release-Modus aktiviert werden soll. Allerdings kann es vorkommen, dass Sie Informationen in die Trace-Konsole aufnehmen möchten, die mit Anwendungen wie SysInternals DbgView . Diese sind in der Regel Nachrichten, die Sie nicht unbedingt in eine Log-Ausgabe senden möchten, oder die Sie schon immer haben für Debugging-Zwecke auch verfügbar sein soll, wenn der Benutzer die Protokollierung ausgeschaltet hat.

Sie wollen sicherlich nicht viele Informationen an die Trace-Konsole senden, da es eine Leistungseinbuße erlegt, aber einige wichtige Informationen könnten geeignet sein.

Ich habe eher Trace verwenden (mit einer dazugehörigen Trace) für die Protokollierung Bemühungen in Release Umgebungen - eine schnelle zwicken der app.config kann dann verschiedene Ebene der Protokollierung geben, ohne die Notwendigkeit für erneute Kompilierung (was ein Problem machen könnte weggehen sowieso) oder die Notwendigkeit, einen Debugger zu befestigen. Besonders praktisch für Probleme, die nur auf Kundenwunsch Maschinen aus irgendeinem Grund auftreten - ich dies erfolgreich verwendet haben Protokollierung Dump aus einem FTP-Klasse (zurück in den alten 1,1 Tage Framework), um Netzwerkübertragungsprobleme zwischen zwei Unternehmen zu diagnostizieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top