首先,ocaml的debug只能在unix系统上,以及windows的cwygin上(记不清了,我只在Ubuntu上用过)
一种方式是可以在toplevel中用trace,如:
# let exchange i j v =
let aux = v.(i) in
v.(i) <- v.(j);
v.(j) <- aux
let one_pass_vect fin v =
for j = 1 to fin do
if v.(j - 1) > v.(j) then exchange (j - 1) j v
done
let bubble_sort_vect v =
for i = Array.length v - 1 downto 0 do
one_pass_vect i v
done;;
val exchange : int -> int -> 'a array -> unit = <fun>
val one_pass_vect : int -> 'a array -> unit = <fun>
val bubble_sort_vect : 'a array -> unit = <fun>
# let q = [|18; 3; 1|];;
val q : int array = [|18; 3; 1|]
# #trace one_pass_vect;;
one_pass_vect is now traced.
# bubble_sort_vect q;;
one_pass_vect <-- 2
one_pass_vect --> <fun>
one_pass_vect* <-- [|<poly>; <poly>; <poly>|]
one_pass_vect* --> ()
one_pass_vect <-- 1
one_pass_vect --> <fun>
one_pass_vect* <-- [|<poly>; <poly>; <poly>|]
one_pass_vect* --> ()
one_pass_vect <-- 0
one_pass_vect --> <fun>
one_pass_vect* <-- [|<poly>; <poly>; <poly>|]
one_pass_vect* --> ()
- : unit = ()
当然,也有对OCaml文件的debug方式。
首先,需要用ocamlc -g *.ml(*指文件名,注意路径)将文件进行编译,然后会发现在当前路径下有一个.out文件。用debug的方式执行该文件,即ocamldebug a.out就可以进入debug,然后会有一个(ocd)可以输入命令。输入r开始执行,输入g 0可以从头来。然后可以用break @* line打断点(*还是文件名,line是要打断点的那一行)。打完断点g 0再r就可以执行到断点位置。接下来就不断输入s执行下一步。
更多内容请看官网教程:https://ocaml.org/learn/tutorials/debug.html