【问题标题】:How do I inspect the in-memory representation of OCaml values?如何检查 OCaml 值的内存表示?
【发布时间】:2020-04-03 18:19:00
【问题描述】:

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

Obj module 看起来很有前途,Real World OCaml has a section about it,但它是否提供了一种获取内存表示的单一方法,而无需知道每个 OCaml 值在内存中的布局方式?

【问题讨论】:

    标签: memory ocaml


    【解决方案1】:

    我搜索了网络,发现了一个名为“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 手册中有相关信息。

    【讨论】:

    • 有趣,这不是我所期望的,但对我来说已经足够好了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多