Computer programmeringsspråk stole på en samtale stack datastruktur --- noen gjøre sin tilstedeværelse eksplisitt til programmereren , mens alle er avhengige av en stabel for programmet hopper som må gå tilbake til stedet der det opprinnelige programmet slapp etter å ha utført noen form for subrutine . Før du overfører kontrollen til bruker , angir et program maksimal størrelse for samtalen stabelen , blant annet forberedelser . Noen ganger kan et program avbrytes på grunn av en segmentering feil , som kan være forårsaket av en rekke faktorer. Du kan enkelt oppdage er en stack overflow er i roten av problemet ved å bruke en debugger . Du trenger
Kildekoden for programmet
Compiler for programmet
Source -level debugger med støtte for visning av en backtrace
Vis flere instruksjoner
1 < p> rekompilere programmet som gir segmentering feil slik at alle debugging symboler er knyttet til det . For eksempel , for en C + + program på alle operativsystemer med GNU pakke med verktøy , utføre : en
" g+ + - g program.c -o -programmet"
der " - g " alternativet instruerer kompilatoren å inkludere debugging symboler.
2
Kjør programmet til den stopper på grunn av en segmentering feil . For eksempel utføre : en
"program"
3
Påberope debugger på programmet rett etter segmentering feil . For eksempel utføre : en
" gdb program "
4
Vise en backtrace bruker debugger . Alle source -nivå debuggers har muligheten til å vise en kjede av løkkefunksjonen besvergelser på den tiden av programmet krasjer . For vår " gdb " eksempel skrive inn " gdb : "
" backtrace "
5
Undersøk tilbakesporingen for tegn på en uendelig rekursjon . Er en enkelt funksjon navn gjentatt flere ganger enn nødvendig før ulykken ? Er det noen funksjoner som ringer hverandre (for eksempel gjensidig rekursjon ) for mange ganger før ulykken ? Hvis svaret på begge spørsmål er "ja", programmet stoppet på grunn av en stack overflow . Den mest sannsynlige årsaken til stack overflow i high- level språk er feil kodet basen tilfeller.