如何追踪OCaml程序的错误?

Sof*_*mur 3 compiler-construction debugging emacs ocaml

我正在编写一个用OCaml编写的编译器.有时当执行错误时,它会显示错误行,但它不显示上下文,例如,如何调用函数,使用哪些值...

为了帮助调试,有没有人知道一种方法来显示执行步骤,直到错误与相关变量的实际值?

顺便说一句,我使用Emacs作为编辑器.

Gil*_*il' 7

Ocaml已编译.您似乎习惯于解释语言,其中运行时系统可以访问完整的程序源代码.使用已编译的程序,运行时系统无法访问大量信息.例如,变量名在编译时消失,没有任何东西可以跟踪传递给每个函数的参数,除非正常程序执行需要(这样做会产生大量开销).

如果使用调试符号编译程序(将-g选项传递给编译器),如果程序死于未捕获的异常,则可以获得堆栈跟踪.您将获得函数名称和一些程序位置,但不会获得详细的内存内容.使用调试信息进行编译会产生更大的可执行文件,但不会更改运行时性能.您需要在运行程序时将OCAMLRUNPARAM环境变量设置为包含b.

ocamlc -g -o foo foo.ml
export OCAMLRUNPARAM=b
./foo
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,则需要在调试器中运行程序.