如何在没有调试符号的情况下获取OCaml中的异常行号?

时间:2015-08-20 20:17:58

标签: ocaml

有没有一种很好的方法可以在没有调试符号的情况下获取OCaml中的异常行号?当然,如果我们打开调试符号并使用OCAMLRUNPARAM=b运行,我们就可以获得回溯。但是,我并不需要整个回溯,我想要一个没有调试符号的解决方案。目前,我们可以编写像

这样的代码
try
    assert false
with x ->
    failwith (Printexc.to_string x ^ "\nMore useful message")

为了从断言中获取文件和行号,但这看起来很尴尬。有没有更好的方法来获取异常的文件和行号?

1 个答案:

答案 0 :(得分:7)

您可以在任何地方使用全局符号__FILE____LINE__

$ ocaml
        OCaml version 4.02.1

# __FILE__;;
- : string = "//toplevel//"
# __LINE__;;
- : int = 2
# 

<强>更新

正如@MartinJambon指出的那样,还有__LOC__,它在一个字符串中给出文件名,行号和字符位置:

# __LOC__;;
- : string = "File \"//toplevel//\", line 2, characters -9--2"

更新2

这些符号在Pervasives module中定义。完整列表为:__LOC____FILE____LINE____MODULE____POS____LOC_OF____LINE_OF__,{{1 }}

最后三个返回有关整个表达式的信息,而不仅仅是文件中的单个位置:

__POS_OF__