Frage

Ich habe einen regulären C # -Code. Ich habe keine Ausnahmen . Ich möchte programmatisch den aktuellen Stack-Trace einzuloggen Zweck für das Debuggen. Beispiel:

public void executeMethod() 
{
    logStackTrace();
    method();
}
War es hilfreich?

Lösung

Haben Sie einen Blick auf die System.Diagnostics Namespace. Viele gute Sachen drin!

System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();

Das ist wirklich gut, einen Sack zu haben, um in, was los ist unter der Haube zu lernen.

Ich würde empfehlen, dass Sie einen Blick in der Logging-Lösungen (wie NLog, log4net oder das Microsoft-Muster und Praktiken Enterprise Library), die Ihre Ziele erreichen können und dann einige. Viel Glück Kumpel!

Andere Tipps

Eine Alternative zu System.Diagnostics.StackTrace ist System.Environment.StackTrace zu verwenden, die gibt eine String-Darstellung des Stacktrace.

Eine weitere nützliche Option ist die $CALLER und $CALLSTACK Debug-Variablen in Visual Studio zu verwenden da dies ohne den Wiederaufbau der Anwendung aktiviert Laufzeit werden.

Console.WriteLine(
    new System.Diagnostics.StackTrace().ToString()
    );

wird die Ausgabe ähnlich sein:

  

bei YourNamespace.Program.executeMethod (String msg)

     

bei YourNamespace.Program.Main (String [] args)

Ersetzen Console.WriteLine mit Ihrer Log Methode. Eigentlich gibt es keine Notwendigkeit für .ToString() für den Console.WriteLine Fall, da es akzeptiert object. Sie können jedoch, dass für Ihren Log (string msg) -Methode.

   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]);
        }
    }

Es scheint für mich zu arbeiten

scroll top