有没有办法浏览 erlang 术语存储 (ETS)

Posted

技术标签:

【中文标题】有没有办法浏览 erlang 术语存储 (ETS)【英文标题】:Is there some way to browse erlang term storage (ETS) 【发布时间】:2017-02-26 15:36:33 【问题描述】:

我有一个使用 erlang 术语存储的小型 Elixir 应用程序,我想浏览它并查看存储的内容。 Elixir 或 Erlang 有没有办法做到这一点?

我想看看它有多大,里面有什么。

编辑:我知道我可以使用:observer.start 查看进程,但没有列为ets 的进程或应用程序。有Elixir.Hex.Registry.ETS,但状态或其他进程信息看起来不正确。

我也可以在iex 中打印内容,但是这不是很好的体验。

【问题讨论】:

erlang.org/doc/man/ets.html#all-0 @mudasobwa 这是一个很酷的功能,但它不适合浏览或探索数据。 如果有一个答案被投赞成票,为什么这个问题被投反对票?如果我们有类似的问题并在这里结束并且答案对我们有帮助,那么这个问题一定不会那么糟糕。 【参考方案1】:

如前所述,您可以使用Observer。要查看 ETS 表格,请单击 Table Viewer 选项卡,然后选择您需要的表格,然后右键单击您可以选择查看 Table InfoShow Table Content

要启动观察者,运行:

:observer.start

截图:

【讨论】:

看起来这不包括所有表格。当我在iex 中运行:ets.all 时,我可以看到更多表格。我错过了什么明显的东西吗? 这是观察者的默认行为。来自文档By default, ETS tables are displayed whereas unreadable private ETS tables and tables created by OTP applications are not diplayed. Use menu View to view "system" ETS tables, unreadable ETS tables, or Mnesia tables.erlang.org/doc/apps/observer/observer_ug.html#id57236【参考方案2】:

您可以为此使用观察者应用程序。它可以显示许多不同的东西,包括 ETS 表的内容。通过输入 Elixir shell 来启动它:

:observer.start

或者在 Erlang shell 中:

observer:start().

为此,Erlang 必须使用 WX 库构建。

Observer User's Guide 中有一些文档。此外,this blog post 描述了如何使用 Observer 来观察远程 Elixir 节点,这对于生产系统是可取的。

【讨论】:

所以,我可以启动 :observer 并列出应用程序和进程,但 ETS 并没有在其中列出,至少不是这样。我会更新问题以使其更清楚。【参考方案3】:

ets:i/1 是一种交互式的表格浏览方式:

http://erlang.org/doc/man/ets.html#i-1

【讨论】:

以上是关于有没有办法浏览 erlang 术语存储 (ETS)的主要内容,如果未能解决你的问题,请参考以下文章

了解 erlang ETS 匹配规范的行为

ETS 似乎没有存储我的插入

限制 ETS 存储的增长

某些 ETS 表类型之间有啥区别?

Erlang ETS 内存碎片

Erlang ETS 原子和隔离