Dator programmeringsspråk förlita sig på ett samtal stack datastruktur --- vissa gör sin närvaro explicit till programmeraren , medan alla förlitar sig på en stapel för programhopp som måste återvända till den plats där det ursprungliga programmet slutade efter ha utförts någon form av subrutinen . Innan överföring av kontrollen till användarkod , sätter ett program den maximala storleken för samtalet stacken , bland andra preparat . Ibland ett program avbryter på grund av en segmentering fel , vilket kan orsakas av en mängd faktorer . Du kan lätt upptäcka är en stack overflow är roten till problemet genom att använda en debugger . Saker du behöver
Källkod för programmet
Compiler för programmet
Source - nivå debugger med stöd för att visa en
backtrace
Visa fler instruktioner
1
kompilera program som ger segmentering fel så att alla Avlusningssymbolerna är länkade till den . Till exempel för en C + + -program på alla operativsystem med GNU svit av verktyg , utföra :
" g+ + - g program.C - o -programmet "
där " - g " alternativet instruerar kompilatorn att inkludera avlusningssymboler .
2
Exekvera programmet tills den stannar på grund av en segmentering fel . För exempel , kör :
" programmet " Addera 3
Åkalla debugger på program direkt efter segmentering fel. För exempel , kör :
" gdb program "
4
Visa ett backtrace använder debugger . Alla source - nivå debuggers har funktioner för att visa den kedja av kapslade funktionen anrop vid tiden för programmet kraschar . För vår " gdb " exempel anger insidan " gdb : "
" backtrace "
5
Undersök backtrace efter tecken på en oändlig rekursion . Är en enda funktion namn upprepas fler gånger än nödvändigt innan kraschen ? Är några funktioner ringer varandra ( t.ex. ömsesidig rekursion ) alltför många gånger innan kraschen ? Om svaret på någon fråga är " ja ", programmet stoppas på grund av en stack overflow . Den mest troliga orsaken stackspill i högnivåspråk är felaktigt kodade basfallen .