Hvordan oppdage Stack Overflow

Hvordan oppdage Stack Overflow


Datamaskinen programmeringsspråk er avhengige av en samtale stabel datastruktur --- noen gjøre sin tilstedeværelse uttrykkelig til programmereren, samtidig som alle er avhengige av en stabel for program hopp som skal vende tilbake til det sted hvor den opprinnelige programmet avsluttet etter å ha utført en slags subrutine . Før du overfører kontrollen til brukerkode, setter et program maksimal størrelse for samtalen stabelen, blant andre 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.

Bruksanvisning

1 Rekompilere programmet som gir segmentering feil slik at alle debugging symboler er knyttet til den. For eksempel, for en C ++ program på alle operativsystemer med GNU pakke med verktøy, utføre:

"G ++ -g program.C -o program"

hvor "-g" alternativet instruerer kompilatoren å inkludere debugging symboler.

2 Kjør programmet til den stopper på grunn av en segmentering feil. For eksempel utfører:

"program"

3 Påkall debugger på programmet rett etter segmentering feil. For eksempel utfører:

"Gdb program"

4 Vis sporbarhet ved hjelp av feilsøkingsverktøyet. Alle kilde nivå debuggers har evnen til å vise kjeden av nestet funksjon besvergelser på den tiden av programmet krasjer. For vår "gdb" eksempel inn inside "gdb:"

"Sporbarhet"

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 stakkoverflyt. Den mest sannsynlige årsaken til stabel flyter på høyt nivå språk er feil kodet basis tilfeller.