Ich habe einen regulären C # -Code. Ich habe keine Ausnahmen . Ich möchte den aktuellen Stack-Trace zum Debuggen programmgesteuert protokollieren. Beispiel:
public void executeMethod()
{
logStackTrace();
method();
}
c#
.net
logging
stack-trace
printstacktrace
Ricibald
quelle
quelle
StackTrace
ist Hund langsam - es ist so sparsam zu verwenden.Eine Alternative dazu
System.Diagnostics.StackTrace
ist die Verwendung von System.Environment.StackTrace, das eine Zeichenfolgendarstellung des Stacktraces zurückgibt.Eine weitere nützliche Option ist die Verwendung der Variablen
$CALLER
und$CALLSTACK
Debugging in Visual Studio, da dies zur Laufzeit aktiviert werden kann, ohne die Anwendung neu zu erstellen.quelle
Environment.StackTrace
Nur neu ist eine Instanz vonStackTrace
.System.Environment.StackTrace
könnte aber eine bequemere Möglichkeit sein, auf diese Informationen zuzugreifen.System.Diagnostics.StackTrace
- siehe msdn.microsoft.com/en-us/library/…Environment.StackTrace
immer damit beginntat System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
? Dies ist nicht Teil der aktuellen Stapelverfolgung, da an dem Punkt, an dem jemand danach sucht.Es gibt zwei Möglichkeiten, dies zu tun. Das
System.Diagnostics.StackTrace()
gibt Ihnen einen Stack-Trace für den aktuellen Thread. Wenn Sie einen Verweis auf eineThread
Instanz haben, können Sie den Stack-Trace dafür über die überladene Version von abrufenStackTrace()
.Vielleicht möchten Sie auch die Frage zum Stapelüberlauf lesen. Wie erhalte ich die Stapelverfolgung eines nicht aktuellen Threads? .
quelle
Sie können dies auch im Visual Studio-Debugger tun, ohne den Code zu ändern.
Dies hilft natürlich nicht, wenn Sie den Code auf einem anderen Computer ausführen, aber es kann sehr praktisch sein, einen Stack-Trace automatisch auszuspucken, ohne den Release-Code zu beeinflussen oder das Programm neu starten zu müssen.
quelle
Die Ausgabe ist ähnlich wie:
Ersetzen Sie
Console.WriteLine
durch IhreLog
Methode. Tatsächlich ist.ToString()
der Console.WriteLine-Fall nicht erforderlich, da er akzeptiert wirdobject
. Möglicherweise benötigen Sie dies jedoch für Ihre Protokollmethode (Zeichenfolge msg).quelle
Scheint für mich zu arbeiten
quelle