C# Language
Przeczytaj i zrozum Stacktraces
Szukaj…
Wprowadzenie
Śledzenie stosu jest bardzo pomocne podczas debugowania programu. Otrzymasz ślad stosu, gdy Twój program zgłosi wyjątek, a czasami, gdy program zakończy się nienormalnie.
Śledzenie stosu dla prostego wyjątku NullReferenceException w formularzach Windows Forms
Stwórzmy mały fragment kodu, który zgłasza wyjątek:
private void button1_Click(object sender, EventArgs e)
{
string msg = null;
msg.ToCharArray();
}
Jeśli to wykonamy, otrzymamy następujący wyjątek i ślad stosu:
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)
Śledzenie stosu przebiega w ten sposób, ale ta część wystarczy do naszych celów.
W górnej części śladu stosu widzimy linię:
w WindowsFormsApplication1.Form1.button1_Click (Object sender, EventArgs e) w F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: wiersz 29
To jest najważniejsza część. Podaje nam dokładną linię, w której wystąpił wyjątek: wiersz 29 w Form1.cs.
W tym miejscu rozpocznij wyszukiwanie.
Druga linia to
w System.Windows.Forms.Control.OnClick (EventArgs e)
Jest to metoda o nazwie button1_Click
. Teraz wiemy, że button1_Click
, w którym wystąpił błąd, został wywołany z System.Windows.Forms.Control.OnClick
.
Możemy tak kontynuować; trzecia linia to
w System.Windows.Forms.Button.OnClick (EventArgs e)
Jest to z kolei kod, który System.windows.Forms.Control.OnClick
.
Śledzenie stosu to lista funkcji, które zostały wywołane, dopóki kod nie napotkał wyjątku. Postępując zgodnie z tym, możesz dowiedzieć się, którą ścieżkę wykonania podążał twój kod, dopóki nie wpadł w kłopoty!
Zauważ, że ślad stosu obejmuje wywołania z systemu .Net; zwykle nie musisz przestrzegać kodu Microsofts System.Windows.Forms
aby dowiedzieć się, co poszło nie tak, tylko kod należący do Twojej aplikacji.
Dlaczego nazywa się to „stosem śledzenia”?
Ponieważ za każdym razem, gdy program wywołuje metodę, śledzi, gdzie była. Ma strukturę danych zwaną „stosem”, w której zrzuca swoją ostatnią lokalizację.
Jeśli zakończy się wykonywanie metody, przegląda stos, aby zobaczyć, gdzie była przed wywołaniem metody - i kontynuuje od tego momentu.
Tak więc stos informuje komputer, gdzie skończył, zanim wywoła nową metodę.
Ale służy również jako pomoc przy debugowaniu. Niczym detektyw śledzący kroki, które przestępca podjął podczas popełnienia przestępstwa, programista może użyć stosu do śledzenia kroków, które program wykonał, zanim się zawiesił.