OCamlDebugが熱い
30分プログラム、その445。ふと思いついてOCamlDebugを試してみたら、予想以上に熱かった。
ステップ実行や変数表示、ブレイクポイントなど普通の機能があるのはもちろんのこと、1ステップ戻るなんてことができる。逆方向に実行って、熱すぎるだろ・・・。
デバッグするコード
let rec fact n m = if n = 0 then m else let m' = n * m in fact n m' let _ = Printf.printf "%d\n" (fact 1 10)
デバッガ起動
ocamldebugコマンドを使ってもいいんだけど、Emacs上で実行すると今どこに居るかが分かりやすいので、今回はEmacs上で実行する。
ソースコードを読み込んだ状態で、おもむろにM-x camldebug
を入力する。"Run camldebug on file"にはfactを指定する。
ステップ実行
(odb) break @ Fact 1
として1行目にブレイクポイントを仕掛けたあと
(odb) run
実行する。
C-c C-sでステップ実行ができる。もしくはstepと入力してもいい。
ここで
(odb) backstep
変数の表示
printを使えば変数の中身を表示できる。
(odb) print m m : int = 10