当前位置: 首页 > 工具软件 > ocaml-jupyter > 使用案例 >

OCaml的debug

应俭
2023-12-01

首先,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

 类似资料: