Ricerca…


introduzione

Una traccia dello stack è di grande aiuto durante il debug di un programma. Si otterrà una traccia stack quando il programma genera un'eccezione e talvolta quando il programma termina in modo anomalo.

Traccia dello stack per una semplice NullReferenceException in Windows Form

Creiamo un piccolo pezzo di codice che genera un'eccezione:

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

Se lo eseguiamo, otteniamo la seguente eccezione e traccia dello stack:

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)

La traccia dello stack continua così, ma questa parte è sufficiente per i nostri scopi.

Nella parte superiore della traccia dello stack vediamo la linea:

a WindowsFormsApplication1.Form1.button1_Click (Oggetto mittente, EventArgs e) in F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: riga 29

Questa è la parte più importante. Indica la riga esatta in cui si è verificata l'eccezione: riga 29 in Form1.cs.
Quindi, qui inizia la tua ricerca.

La seconda linea è

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

Questo è il metodo che ha chiamato button1_Click . Così ora sappiamo che button1_Click , dove si è verificato l'errore, è stato chiamato da System.Windows.Forms.Control.OnClick .

Possiamo continuare così; la terza linea è

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

Questo è, a sua volta, il codice che ha chiamato System.windows.Forms.Control.OnClick .

La traccia dello stack è l'elenco di funzioni che è stato chiamato fino a quando il codice non ha incontrato l'eccezione. E seguendo questo, puoi capire quale percorso di esecuzione ha seguito il tuo codice fino a quando non si è trovato nei guai!

Si noti che la traccia dello stack include chiamate dal sistema .Net; normalmente non è necessario seguire tutti i codici Microsofts System.Windows.Forms per scoprire cosa è andato storto, solo il codice che appartiene alla propria applicazione.

Quindi, perché si chiama "stack trace"?
Perché ogni volta che un programma chiama un metodo, tiene traccia di dove si trovava. Ha una struttura dati chiamata "stack", dove scarica la sua ultima posizione.
Se è fatto eseguendo il metodo, guarda nello stack per vedere dove era prima che chiamasse il metodo - e continua da lì.

Quindi lo stack consente al computer di sapere dove è stato interrotto prima di chiamare un nuovo metodo.

Ma serve anche come aiuto per il debug. Come un detective che traccia i passi compiuti da un criminale quando commette il crimine, un programmatore può usare lo stack per tracciare i passi compiuti da un programma prima che si schiantasse.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow