Als Stacktrace („Stapel(speicher)zurückverfolgung“) oder in .NET Stackwalk[1] bezeichnet man in der Informationstechnik die Ausgabe und Interpretation des Inhalts des Stacks. Ein Stacktrace wird meist zu Diagnosezwecken im Falle eines Programmabsturzes erstellt, denn damit kann die Aufrufkaskade, die zu dem Fehler führte, rekonstruiert werden.
Auf dem Stack werden u. a. die Rücksprungadressen zu den Positionen im Programm hinterlegt, von denen aus Prozeduren aufgerufen wurden. So entsteht eine Liste von Prozeduradressen, deren Rückverfolgung es erlaubt, den Pfad von Prozeduraufrufen vom Start des Programms bis hin zum aktuellen Zustand zu erkennen. Im Fehlerfall kann sich dies als hilfreich erweisen, um die aufrufende Prozedur und verwendete Übergabeparameter ausfindig zu machen.
Aus diesem Grund wird beispielsweise unter Linux nach einer Kernelpanik standardmäßig ein Stacktrace ausgegeben.
Stacktrace in Java
BearbeitenIn der Programmiersprache Java ist der Stacktrace fester Sprachbestandteil und mit dem Konzept der Exceptionbehandlung verbunden:
try {
doSomething();
} catch(Exception exc) {
exc.printStackTrace();
}
Die Ausgabe des Stacktraces sieht dann beispielsweise wie folgt aus:
java.lang.ArrayIndexOutOfBoundsException: 3 at example.common.TestTry.execute(TestTry.java:17) at example.common.TestTry.main(TestTry.java:11)
Es wird also kein Hexdump mit Registerinhalten ausgegeben, sondern der Stacktrace als Text. Diese Informationen ermöglichen es dem Programmierer, einen Fehler, der während des Programmablaufs auftritt, schneller zu lokalisieren und zu beheben.