Antworten:
Schauen Sie sich den System.DiagnosticsNamespace an. Viele Leckereien drin!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
Es ist wirklich gut, sich umzuschauen, um zu erfahren, was unter der Haube vor sich geht.
Ich würde empfehlen, dass Sie sich mit Protokollierungslösungen (wie NLog, log4net oder den Microsoft-Mustern und -Praktiken der Enterprise Library) befassen, die möglicherweise Ihre Ziele erreichen, und noch einige mehr. Viel Glück, Junge!
Eine Alternative dazu System.Diagnostics.StackTraceist 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.
Environment.StackTraceNur neu ist eine Instanz von StackTrace.
System.Environment.StackTracekönnte aber eine bequemere Möglichkeit sein, auf diese Informationen zuzugreifen.
System.Diagnostics.StackTrace- siehe msdn.microsoft.com/en-us/library/…
Environment.StackTraceimmer damit beginnt at 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 eine ThreadInstanz haben, können Sie den Stack-Trace dafür über die überladene Version von abrufen StackTrace().
Vielleicht möchten Sie auch die Frage zum Stapelüberlauf lesen. Wie erhalte ich die Stapelverfolgung eines nicht aktuellen Threads? .
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.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
Die Ausgabe ist ähnlich wie:
at YourNamespace.Program.executeMethod (String msg)
at YourNamespace.Program.Main (String [] args)
Ersetzen Sie Console.WriteLinedurch Ihre LogMethode. Tatsächlich ist .ToString()der Console.WriteLine-Fall nicht erforderlich, da er akzeptiert wird
object. Möglicherweise benötigen Sie dies jedoch für Ihre Protokollmethode (Zeichenfolge msg).
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
Scheint für mich zu arbeiten
StackTraceist Hund langsam - es ist so sparsam zu verwenden.