Lenguajes de programación se basan en una estructura de datos llamada pila --- algunos hacen su presencia explícita para el programador, mientras todos se basan en una pila para saltos de programa que debe volver al lugar donde el programa original fue apagado después de haber ejecutado algún subprograma. Antes de transferir el control al código de usuario , un programa establece el tamaño máximo de la pila de llamadas , entre otras preparaciones . A veces un programa aborta debido a un fallo de segmentación , que puede ser causada por una variedad de factores . Usted puede detectar fácilmente un desbordamiento de pila está en la raíz del problema mediante el uso de un depurador. Cosas que necesitará
El código fuente para el programa de descarga Compiler para el programa de descarga depurador a nivel de fuente con soporte para la visualización de un backtrace
Ver Más instrucciones
1 < p> Vuelva a compilar el programa que está dando el fallo de segmentación para que todos los símbolos de depuración están vinculados a ella. Por ejemplo , para un programa de C + + en cualquier sistema operativo con el conjunto de herramientas GNU , ejecutar : en opcion a Compra
" g+ +- g programa program.c -o "
la " g " instruye al compilador que incluya símbolos de depuración .
2
Ejecutar el programa hasta que se detenga debido a un fallo de segmentación . Por ejemplo, ejecute:
" programa "
3
Invocar el depurador en el programa después de la avería de la segmentación . Por ejemplo, ejecute:
" programa gdb "
4
Muestra una traza utilizando el depurador. Todos los depuradores de nivel de fuente tienen la capacidad de mostrar la cadena de invocaciones de funciones anidadas en el momento de la caída del programa . Para nuestro ejemplo " gdb ", introduzca en el interior " gdb : "
" backtrace "
5
Examine la traza signos de una recursividad infinita . Es un nombre de función repite más veces que sea necesario antes del accidente ? Son algunas de las funciones de llamadas entre sí (por ejemplo , la recursividad mutua) demasiadas veces antes del accidente ? Si la respuesta a cualquiera de estas preguntas es "sí ", el programa se detuvo debido a un desbordamiento de pila. La causa más probable de los desbordamientos de pila en lenguajes de alto nivel se codifican incorrectamente casos base .