Druck des aktuellen Aufruf-Stacks in OCaml

8

Gibt es in OCaml eine Möglichkeit, den aktuellen Aufruf-Stack programmatisch zu bekommen? Damit meine ich nicht einen Debugger, sondern einen Funktionsaufruf innerhalb des Programms, der den aktuellen Aufruf-Stack druckt. Ich kann mir vorstellen, dass dies nicht über die Fähigkeiten des Byte-Code-Interpreters hinausgehen sollte, insbesondere wenn Debug-Symbole verfügbar sind.

    
Jon Smark 12.08.2012, 11:22
quelle

4 Antworten

2

Ich kam zu dieser Frage auf der Suche nach der gleichen Sache, hier ist meine Lösung

Printexc.get_callstack 5 |> Printexc.raw_backtrace_to_string

(Es ist eigentlich eine ziemlich gute Möglichkeit, sich mit einer neuen Codebasis vertraut zu machen)

    
Edgar Aroutiounian 29.06.2015 18:57
quelle
1

Sie können auch ocamldebug verwenden, mit dem Sie Ihren in Bytecode kompilierten Code starten können. In dieser Umgebung sind Printexc.get_backtrace () weit mehr abgeschlossen.

    
Ontologiae 03.09.2012 10:12
quelle
0

Für nativen Code kann man glibc's backtrace verwenden, obwohl es nicht alles drucken kann Frames richtig stapeln.

    
ygrek 13.08.2012 07:17
quelle
0

Leider ist die einzige Möglichkeit, ein Backtrace innerhalb des Codes zu erhalten, wenn eine Ausnahme ausgelöst wird, Printexc.get_backtrace (). Es wird Ihnen nicht die Namen der Funktionen geben, sondern nur die Orte im Code dessen, was sich im Stapel befindet, und nur, wenn OCaml sie wiederherstellen konnte ...

    
Fabrice Le Fessant 13.08.2012 07:42
quelle

Tags und Links