Suche…


Einführung

Ein Stack-Trace ist eine große Hilfe beim Debuggen eines Programms. Sie erhalten eine Stack-Ablaufverfolgung, wenn Ihr Programm eine Ausnahme auslöst und manchmal, wenn das Programm abnormal beendet wird.

Stack-Trace für eine einfache NullReferenceException in Windows Forms

Lassen Sie uns ein kleines Stück Code erstellen, das eine Ausnahme auslöst:

private void button1_Click(object sender, EventArgs e)
{
    string msg = null;
    msg.ToCharArray();
}

Wenn wir das ausführen, erhalten wir die folgende Ausnahme und Stack-Trace:

System.NullReferenceException: "Object reference not set to an instance of an object."
   at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in F:\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 29
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

Die Stapelverfolgung geht so weiter, aber dieser Teil wird für unsere Zwecke ausreichen.

Am oberen Rand des Stack-Trace sehen wir die Zeile:

at WindowsFormsApplication1.Form1.button1_Click (Objektsender, EventArgs e) in F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: Zeile 29

Dies ist der wichtigste Teil. Es zeigt uns die genaue Zeile, in der die Exception aufgetreten ist: Zeile 29 in Form1.cs.
Hier beginnen Sie Ihre Suche.

Die zweite Zeile ist

bei System.Windows.Forms.Control.OnClick (EventArgs e)

Dies ist die Methode, die button1_Click aufgerufen button1_Click . Nun wissen wir, dass button1_Click , wo der Fehler aufgetreten ist, von System.Windows.Forms.Control.OnClick aufgerufen wurde.

Wir können so weitermachen; Die dritte Zeile ist

bei System.Windows.Forms.Button.OnClick (EventArgs e)

Dies ist wiederum der Code, der System.windows.Forms.Control.OnClick aufgerufen System.windows.Forms.Control.OnClick .

Der Stack-Trace ist die Liste der Funktionen, die aufgerufen wurden, bis der Code auf die Ausnahme stieß. Wenn Sie dem folgen, können Sie herausfinden, welchen Ausführungspfad Ihr Code folgte, bis er in Schwierigkeiten geriet!

Beachten Sie, dass die Stack-Trace Aufrufe vom .Net-System enthält. Normalerweise müssen Sie nicht alle System.Windows.Forms Microsofts System.Windows.Forms befolgen, um herauszufinden, was schiefgegangen ist, sondern nur den Code, der zu Ihrer eigenen Anwendung gehört.

Warum wird dies als "Stack-Trace" bezeichnet?
Jedes Mal, wenn ein Programm eine Methode aufruft, verfolgt es den Ort, an dem es sich befand. Es hat eine Datenstruktur namens "Stack", in der der letzte Speicherort abgelegt wird.
Wenn die Ausführung der Methode abgeschlossen ist, wird auf dem Stack nach dem Ort gesucht, an dem sie sich vor dem Aufruf der Methode befand - und von dort aus fortgesetzt.

Der Stack teilt dem Computer also mit, wo er aufgehört hat, bevor er eine neue Methode aufruft.

Es dient aber auch zur Fehlersuche. Wie ein Detektiv, der die Schritte verfolgt, die ein Krimineller bei der Begehung seiner Straftat unternommen hat, kann ein Programmierer den Stapel verwenden, um die Schritte zu verfolgen, die ein Programm ausgeführt hat, bevor es abgestürzt ist.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow