Recherche…


Introduction

Une trace de pile est une aide précieuse lors du débogage d'un programme. Vous obtiendrez une trace de pile lorsque votre programme lève une exception et parfois lorsque le programme se termine de manière anormale.

Trace de trace pour une exception NullReferenceException dans Windows Forms

Créons un petit morceau de code qui lance une exception:

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

Si nous l'exécutons, nous obtenons les exceptions et traces de pile suivantes:

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 trace de la pile continue comme ça, mais cette partie suffira à nos fins.

En haut de la pile, nous voyons la ligne:

à WindowsFormsApplication1.Form1.button1_Click (expéditeur d'objet, EventArgs e) dans F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: ligne 29

C'est la partie la plus importante. Il nous indique la ligne exacte où l'Exception s'est produite: ligne 29 dans Form1.cs.
Donc, c'est là que vous commencez votre recherche.

La deuxième ligne est

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

C'est la méthode qui a appelé button1_Click . Nous savons maintenant que button1_Click , où l'erreur s'est produite, a été appelée depuis System.Windows.Forms.Control.OnClick .

Nous pouvons continuer comme ça; la troisième ligne est

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

C'est à son tour le code appelé System.windows.Forms.Control.OnClick .

La trace de la pile est la liste des fonctions appelées jusqu'à ce que votre code rencontre l'Exception. Et en suivant cela, vous pouvez déterminer le chemin d'exécution suivi par votre code jusqu'à ce qu'il rencontre des problèmes!

Notez que la trace de la pile inclut les appels du système .Net; vous n'avez normalement pas besoin de suivre tout le code de Microsofts System.Windows.Forms pour savoir ce qui a mal tourné, seul le code qui appartient à votre propre application.

Alors, pourquoi est-ce appelé "trace de pile"?
Parce que chaque fois qu'un programme appelle une méthode, il enregistre sa localisation. Il a une structure de données appelée "pile", où il vide son dernier emplacement.
Si la méthode est exécutée, elle regarde la pile pour voir où elle se trouvait avant d'appeler la méthode - et continue à partir de là.

Ainsi, la pile permet à l'ordinateur de savoir où il s'est arrêté, avant d'appeler une nouvelle méthode.

Mais cela sert aussi d'aide au débogage. Comme un détective qui trace les étapes qu’un criminel a prises pour commettre son crime, un programmeur peut utiliser la pile pour suivre les étapes d’un programme avant qu’il ne s’écroule.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow