linguaggi di programmazione informatica si basano su una struttura dati stack di chiamate --- alcuni fanno la propria presenza esplicita al programmatore , mentre tutti si basano su una pila per salti di programma che deve tornare al luogo in cui il programma originale era interrotto dopo aver eseguito un qualche tipo di subroutine . Prima di trasferire il controllo al codice utente , un programma imposta la dimensione massima per lo stack di chiamate , tra le altre preparazioni . Talvolta un programma interrompe a causa di un errore di segmentazione , che può essere causato da una varietà di fattori . Si può facilmente rilevare un overflow dello stack è alla radice del problema utilizzando un debugger . Cose che ti serviranno
codice sorgente per il programma
compilatore per il programma
livello Fonte debugger con il supporto per la visualizzazione di un backtrace
Mostra più istruzioni
1 < p > ricompilare il programma che sta dando l' errore di segmentazione in modo che tutti i simboli di debug sono collegati in esso. Ad esempio, per un programma C + + su qualsiasi sistema operativo con la suite di strumenti di GNU , eseguire : opzione
" g+ + - g programma program.c -o "
dove il " - g" indica al compilatore di includere i simboli di debug .
2
Eseguire il programma fino a quando non si blocca a causa di un errore di segmentazione . Per l'esempio , eseguire :
" programma "
3
Invoca il debugger sul programma subito dopo l' errore di segmentazione . Per l'esempio , eseguire :
" programma gdb "
4
Visualizzare un backtrace utilizzando il debugger . Tutti i debugger a livello di sorgente hanno la capacità di visualizzare la catena di invocazioni di funzioni annidate al momento del crash programma . Per il nostro esempio " gdb " , entrare dentro " gdb : "
" backtrace "
5
Esaminare il backtrace per i segni di una ricorsione infinita . È un singolo nome di funzione ripetuto più volte di quanto necessario, prima del crollo ? Sono alcune funzioni di chiamata tra loro ( per esempio , la ricorsione mutua ) troppe volte prima del crollo ? Se la risposta a entrambe le domande è "sì", il programma interrotto a causa di un overflow dello stack . La causa più probabile di overflow dello stack in linguaggi di alto livello sono codificati in modo non corretto i casi di base .