如何追踪OCaml程序的错误?

时间:2011-06-18 14:41:20

标签: debugging compiler-construction emacs ocaml

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

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

顺便说一下,我使用的是Emacs作为编辑器。

2 个答案:

答案 0 :(得分:7)

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

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

ocamlc -g -o foo foo.ml
export OCAMLRUNPARAM=b
./foo

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

答案 1 :(得分:0)

此链接Debugging in Ocaml 应该回答你的问题。