我正在编写一个用OCaml编写的编译器。有时当执行错误时,它会显示错误行,但它不显示上下文,例如,如何调用函数,使用哪些值......
为了帮助调试,有没有人知道一种方法来显示执行步骤,直到错误与相关变量的实际值有关?
顺便说一下,我使用的是Emacs作为编辑器。
答案 0 :(得分:7)
编译Ocaml。您似乎习惯于解释语言,其中运行时系统可以访问完整的程序源代码。使用已编译的程序,运行时系统无法访问大量信息。例如,变量名在编译时消失,没有任何东西可以跟踪传递给每个函数的参数,除非正常程序执行需要(这样做会产生很多开销)。
如果使用调试符号编译程序(将-g
选项传递给编译器),如果程序死于未捕获的异常,则可以获得堆栈跟踪。您将获得函数名称和一些程序位置,但不会获得详细的内存内容。使用调试信息进行编译会产生更大的可执行文件,但不会更改运行时性能。运行程序时,您需要将OCAMLRUNPARAM
environment variable设置为包含b
。
ocamlc -g -o foo foo.ml
export OCAMLRUNPARAM=b
./foo
如果您需要更多信息,则需要在调试器中运行程序。
答案 1 :(得分:0)
此链接Debugging in Ocaml 应该回答你的问题。