C# Language
Leer y entender Stacktraces
Buscar..
Introducción
Un seguimiento de pila es una gran ayuda cuando se depura un programa. Obtendrá un seguimiento de la pila cuando su programa lanza una Excepción, y algunas veces cuando el programa termina de forma anormal.
Rastreo de pila para una simple NullReferenceException en formularios Windows Forms
Vamos a crear un pequeño fragmento de código que lanza una excepción:
private void button1_Click(object sender, EventArgs e)
{
string msg = null;
msg.ToCharArray();
}
Si ejecutamos esto, obtenemos la siguiente excepción y el seguimiento de pila:
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 traza de pila continúa así, pero esta parte será suficiente para nuestros propósitos.
En la parte superior de la traza de la pila vemos la línea:
en WindowsFormsApplication1.Form1.button1_Click (Object sender, EventArgs e) en F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: línea 29
Esta es la parte más importante. Nos dice la línea exacta donde ocurrió la excepción: línea 29 en Form1.cs.
Entonces, aquí es donde empiezas tu búsqueda.
La segunda linea es
en System.Windows.Forms.Control.OnClick (EventArgs e)
Este es el método que llamamos button1_Click
. Así que ahora sabemos que se button1_Click
, donde ocurrió el error, desde System.Windows.Forms.Control.OnClick
.
Podemos continuar así; la tercera linea es
en System.Windows.Forms.Button.OnClick (EventArgs e)
Este es, a su vez, el código que se llama System.windows.Forms.Control.OnClick
.
El seguimiento de la pila es la lista de funciones a las que se llamó hasta que su código encontró la excepción. ¡Y al seguir esto, puede averiguar qué ruta de ejecución siguió su código hasta que se encontró con problemas!
Tenga en cuenta que el seguimiento de la pila incluye llamadas del sistema .Net; Normalmente, no es necesario seguir todos los códigos del sistema Microsofts System.Windows.Forms
para averiguar qué salió mal, solo el código que pertenece a su propia aplicación.
Entonces, ¿por qué esto se llama un "seguimiento de pila"?
Porque, cada vez que un programa llama a un método, realiza un seguimiento de dónde estaba. Tiene una estructura de datos llamada "pila", donde descarga su última ubicación.
Si ha terminado de ejecutar el método, busca en la pila para ver dónde estaba antes de que llamara al método, y continúa desde allí.
Así que la pila le permite a la computadora saber dónde se quedó, antes de llamar a un nuevo método.
Pero también sirve como una ayuda de depuración. Al igual que un detective que rastrea los pasos que tomó un criminal al cometer su delito, un programador puede usar la pila para rastrear los pasos que tomó un programa antes de que fallara.