如何调试OCaml Dune测试程序?分步调试方案咨询
调试OCaml测试程序的两种方法(ocamldebug / gdb)
一、使用ocamldebug(字节码调试)
ocamldebug仅支持调试OCaml字节码文件,你之前直接加载.ml源码文件必然报错,且Dune默认编译的是原生代码(.exe),需先生成字节码版本的测试程序:
- 编译字节码测试程序
dune build test/test_foobar.bc
若需保留完整调试信息,可指定开发profile编译:
dune build test/test_foobar.bc --profile=dev
- 启动ocamldebug并加载字节码程序
ocamldebug ./_build/default/test/test_foobar.bc
- 常用调试操作
- 在源码指定行设置断点:
break test/test_foobar.ml:1 - 启动程序:
run - 逐行单步执行:
step - 查看当前上下文源码:
list - 打印变量值(若程序中有变量):
print 变量名
二、使用gdb(原生代码调试)
gdb调试OCaml原生程序需确保编译时包含调试符号,Dune默认的release profile会剔除调试信息,因此需用dev profile编译:
- 带调试信息编译原生测试程序
dune build test/test_foobar.exe --profile=dev
- 启动gdb并进入TUI界面
gdb --tui ./_build/default/test/test_foobar.exe
- 常用调试操作
- 在源码指定行设置断点:
break test/test_foobar.ml:1 - 启动程序:
run - 逐行单步执行(进入函数):
step - 继续执行至下一个断点:
continue
注意:gdb调试OCaml原生代码时,可能会进入底层C代码栈帧,此时可使用finish命令回到OCaml代码上下文。
内容的提问来源于stack exchange,提问作者Costava
相关产品推荐
相关产品推荐

