Zoeken…


Invoering

Een stack-trace is een geweldig hulpmiddel bij het debuggen van een programma. U krijgt een stack-trace wanneer uw programma een uitzondering genereert en soms wanneer het programma abnormaal wordt beëindigd.

Stapel trace voor een eenvoudige NullReferenceException in Windows-formulieren

Laten we een klein stukje code maken dat een uitzondering genereert:

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

Als we dit uitvoeren, krijgen we de volgende uitzondering en stacktracering:

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)

De stacktracering gaat zo verder, maar dit deel volstaat voor onze doeleinden.

Bovenaan het stapeltrace zien we de regel:

bij WindowsFormsApplication1.Form1.button1_Click (Objectafzender, EventArgs e) in F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: regel 29

Dit is het belangrijkste onderdeel. Het vertelt ons de exacte regel waar de uitzondering is opgetreden: regel 29 in Form1.cs.
Dus hier begin je met zoeken.

De tweede regel is

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

Dit is de methode die button1_Click heet. Dus nu weten we dat button1_Click , waar de fout optrad, werd aangeroepen vanuit System.Windows.Forms.Control.OnClick .

We kunnen zo doorgaan; de derde regel is

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

Dit is op zijn beurt de code die System.windows.Forms.Control.OnClick .

De stacktracering is de lijst met functies die werd aangeroepen totdat uw code de uitzondering tegenkwam. En door dit te volgen, kunt u erachter komen welk uitvoeringspad uw code volgde totdat het in de problemen kwam!

Merk op dat de stacktracering oproepen van het .Net-systeem bevat; u hoeft normaal gesproken niet alle Microsofts System.Windows.Forms code te volgen om erachter te komen wat er mis is gegaan, alleen de code die bij uw eigen toepassing hoort.

Dus, waarom wordt dit een "stack trace" genoemd?
Omdat elke keer dat een programma een methode aanroept, wordt bijgehouden waar het was. Het heeft een datastructuur genaamd de "stack", waar het zijn laatste locatie dumpt.
Als het klaar is met het uitvoeren van de methode, kijkt het op de stapel om te zien waar het was voordat het de methode riep - en gaat vanaf daar verder.

Dus de stapel laat de computer weten waar hij was gebleven voordat hij een nieuwe methode aanroerde.

Maar het dient ook als een foutopsporingshulp. Net als een detective die de stappen volgt die een crimineel heeft genomen bij het plegen van zijn misdaad, kan een programmeur de stapel gebruiken om de stappen te volgen die een programma heeft genomen voordat het crashte.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow