【发布时间】:2020-04-03 18:19:00
【问题描述】:
有没有办法在不使用 gdb 的情况下检查 OCaml 值的内存表示在 OCaml 中?理想情况下,输出会给我十六进制字节或二进制位,类似于您可以通过 gdb 获得的。
Obj module 看起来很有前途,Real World OCaml has a section about it,但它是否提供了一种获取内存表示的单一方法,而无需知道每个 OCaml 值在内存中的布局方式?
【问题讨论】:
有没有办法在不使用 gdb 的情况下检查 OCaml 值的内存表示在 OCaml 中?理想情况下,输出会给我十六进制字节或二进制位,类似于您可以通过 gdb 获得的。
Obj module 看起来很有前途,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 手册中有相关信息。
【讨论】: