2016-06-15 15 views
2

Ich habe ein Fortran-Programm kompiliert mit gfortran mit der -fcheck=bounds Compiler-Option. Dies führt dazu, dass der Code "array out of bounds" -Fehler meldet und anschließend beendet wird.Set Haltepunkt in Gdb auf Array außerhalb der Grenzen für Gfortran-Programm

Ich möchte mein Programm mit gdb debuggen, um die Ursache des Fehlers zu finden. Leider in gdb wird der Code immer noch auf einen Out-of-Bounds-Fehler verlassen.

Gibt es eine Möglichkeit, gdb zu sagen, die Ausführung zu stoppen, wenn ein Fehler außerhalb der Grenzen auftritt?

Antwort

4

Compile mit -g benutzen Sie debuggen. Dann, zuerst, legte ich einen Unterbrechungspunkt auf 10, das funktioniert gut, sobald das Programm stoppt, können Sie von bis zum Punkt des Fehlers zurückverfolgen.

Das Backtrace durchläuft auch eine Funktion namens _gfortran_runtime_error_at, so dass Sie mehr Glück haben können, den Haltepunkt dort zu platzieren, dies hat für mich funktioniert und wird offensichtlich nur ausgelöst, wenn Sie einen Laufzeitfehler bekommen.

+0

Danke! Das hat perfekt funktioniert. –

0

Um einen Haltepunkt auf gdb, setzen Sie den Befehl break dann den Namen der Datei, die Sie debuggen, einen Doppelpunkt und die Nummer der Zeile, von dem Sie, um die Ausführung wollen:

break main.f90:24 

stoppen die Ausführung in Zeile 24 des Programms main. Dann können Sie den Befehl step verwenden, um zur nächsten Zeile und so weiter zu springen. An diesem Punkt können Sie print verwenden, um den Wert einer beliebigen Variablen zu überprüfen. Wenn Sie einen anderen Haltepunkt definiert haben, können Sie mit dem Befehl next direkt zum nächsten Haltepunkt springen.

Sie müssen Ihr Programm mit dem -g Flagge kompilieren Informationen zu der Lage sein, tu gdb

+0

Das beantwortet meine Frage nicht wirklich. Ich weiß, wie man einen Breakpoint an einer bestimmten Codezeile setzt. Ich muss brechen, wenn ein "array out of bounds" -Fehler erkannt wird. Die bestimmte Codezeile wird möglicherweise millionenfach ausgewertet, bevor ein solcher Fehler auftritt. Daher ist das Festlegen eines Haltepunkts in dieser Zeile nicht hilfreich. –