Computer Programmiersprachen beruhen auf einer Call-Stack Datenstruktur --- einige machen ihre Präsenz explizit für den Programmierer , während alle auf einen Stapel für Programmsprünge , die zu der Stelle, wo das ursprüngliche Programm aufgehört nach Rückkehr verlassen müssen nachdem ausgeführt eine Art Unterprogramm . Bevor die Steuerung an Benutzer-Code , setzt ein Programm die maximale Größe für den Call-Stack unter anderem die Vorbereitungen . Manchmal ist ein Programm abgebrochen aufgrund eines Fehlers Segmentierung , die durch eine Vielzahl von Faktoren verursacht werden. Sie können leicht erkennen, ist ein Stack-Überlauf ist die Wurzel des Problems , indem Sie einen Debugger . Things You
Quellcode für das Programm
Compiler für das Programm
Quelle - Level-Debugger mit Unterstützung für die Anzeige eines backtrace
brauchen anzeigen Weitere Anweisungen
1 < p> Recompile das Programm, das geben die Segmentation Fault wird , so dass alle Debug-Symbole in sie verknüpft sind. Zum Beispiel für eine C + +-Programm auf jedem Betriebssystem mit dem GNU- Suite von Tools , ausführen :
" g+ +- g -o programm.c Programm "
wo der " - g "-Option weist den Compiler an Debugging- Symbole enthalten .
2
Führen Sie das Programm , bis er aufgrund einer Segmentation Fault stoppt . Für das Beispiel auszuführen :
" Programm "
3
Rufen Sie den Debugger auf dem Programm direkt nach dem Segmentation Fault . Für das Beispiel auszuführen :
" gdb Programm "
4
Zeigt eine Rückverfolgung mit dem Debugger . Alle Source-Level- Debugger die Fähigkeit haben, die Anzeige der Kette von verschachtelten Funktionsaufrufe zum Zeitpunkt des Absturz des Programms . Für unsere " gdb " beispielsweise innerhalb enter " gdb : "
" backtrace "
5
Untersuchen Sie die Rückverfolgung auf Anzeichen einer Endlosschleife . Ist eine einzige Funktion Name wiederholt häufiger als nötig vor dem Absturz ? Sind ein paar Funktionen Rufen einander (z. B. gegenseitige Rekursion ) zu oft vor dem Absturz ? Wenn die Antwort auf beide Fragen "ja ", das Programm gestoppt, weil von einem Stack-Überlauf . Die wahrscheinlichste Ursache für Stapelüberläufe in Hochsprachen sind falsch Basis Fällen codiert.