Computer programmeertalen rekenen op een call stack datastructuur --- sommige zijn aanwezigheid expliciet aan de programmeur , terwijl alle vertrouwen op een stapel voor programma sprongen die moeten terugkeren naar de plaats waar het oorspronkelijke programma verlaten uit na een soort van subroutine te hebben uitgevoerd . Voor de overdracht van de controle aan de gebruiker code , een programma stelt de maximale grootte voor de call-stack , onder andere preparaten . Soms is een programma afbreekt door een segmentatie fout , die kan worden veroorzaakt door een aantal factoren . U kunt eenvoudig te detecteren is een stack overflow is aan de wortel van het probleem met behulp van een debugger . Wat je Broncode Noodzaak voor het programma Compiler voor het programma Source - level debugger met ondersteuning voor het weergeven van een backtrace Toon Meer Aanwijzingen 1 Hercompileer het programma , dat is het geven van de segmentatie fout , zodat alle debugging symbolen worden gekoppeld in. Bijvoorbeeld , voor een C + + -programma op elk besturingssysteem met de GNU suite van tools , voeren : optie " g+ + - g program.c - o programma " waar de " - g" instrueert de compiler om debugging symbolen bevatten . kopen van 2 Voer het programma totdat het stopt vanwege een segmentation fault . Voor het voorbeeld uitvoeren : " programma " 3 Roep de debugger op het programma direct na de segmentation fault . Voor het voorbeeld uitvoeren : " gdb programma " 4 Geef een backtrace behulp van de debugger . All source - level debuggers hebben de mogelijkheid van het weergeven van de reeks van geneste functie aanroepen ten tijde van het programma crash . Voor onze " gdb " Voer bijvoorbeeld binnen " gdb : " " backtrace " 5 Onderzoek de backtrace op tekenen van een oneindige herhaling . Is een enkele functie naam herhaald vaker dan nodig is voor de crash ? Zijn een paar functies bellen elkaar ( bijvoorbeeld wederzijdse recursie ) te vaak voor de crash ? Als het antwoord op beide vragen is " ja , " het programma gestopt vanwege een stack overflow . De meest waarschijnlijke oorzaak van de stack overflows in high - level talen zijn onjuist gecodeerd base gevallen .
|