如何检查 OCaml 值的内存表示?

How do I inspect the in-memory representation of OCaml values?

有没有什么方法可以在不使用 gdb 的情况下检查 OCaml 值 在 OCaml 中的内存表示?理想情况下,输出会给我十六进制字节或二进制位,类似于您可以通过 gdb 获得的内容。

Obj module looks promising, and Real World OCaml has a section about it,但它是否提供了一种获取内存中表示的单一方法,而不必知道每个 OCaml 值在内存中的布局方式?

我在网上搜索了一下,发现了一个名为 "inspect" 的 OCaml 包,它似乎可以做您想要的事情。这是它显示的值 true[1; 2; 3]:

# Sexpr.dump true;;
(DUMP 1)- : unit = ()
# Sexpr.dump [1;2;3];;
(DUMP
   (BLK/0
      :TAG 0
      :VALUES
      1
      (BLK/1 :TAG 0 :VALUES 2 (BLK/2 :TAG 0 :VALUES 3 0))))- : unit = ()

它作为名为 "inspect" 的 opam 包提供。软件包存储库的 Github 页面是 https://github.com/krohrer/caml-inspect

如果不熟悉 OCaml 值的布局,输出将毫无意义。我认为这是不可避免的。 Github 页面和 OCaml 手册中有信息。