gpt4 book ai didi

ocaml - 如何在不调试符号的情况下获取 OCaml 中异常的行号?

转载 作者:行者123 更新时间:2023-12-04 23:43:50 28 4
gpt4 key购买 nike

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

try
assert false
with x ->
failwith (Printexc.to_string x ^ "\nMore useful message")

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

最佳答案

有全局符号__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__ , __POS_OF__ .

最后三个返回有关整个表达式的信息,而不仅仅是文件中的单个位置:
# __LOC_OF__ (8 * 4);;
- : string * int = ("File \"//toplevel//\", line 2, characters 2-9", 32)

关于ocaml - 如何在不调试符号的情况下获取 OCaml 中异常的行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127574/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com