You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang新手求教:如何附着到运行中应用查看DETS/ETS?求示例

当然可以!附着到运行中的Erlang应用查看ETS/DETS表完全可行

作为Erlang新手,能想到利用Erlang的特性来观测运行中的应用,说明你已经抓住了Erlang可观测性的核心优势之一。下面我给你一步步拆解操作流程,还有完整的示例:

第一步:确保目标应用节点可连接

首先,你的目标Erlang应用必须以命名节点的方式启动,并且要记住它的Cookie(节点间通信的验证密钥)。如果是你自己启动的测试应用,可以这么启动:

erl -sname my_running_app -setcookie mysecretcookie

启动后,在这个节点里创建测试用的ETS和DETS表:

% 创建一个公共可访问的ETS表(允许外部节点读取)
ets:new(my_ets_table, [public, named_table]),
ets:insert(my_ets_table, {user1, "Alice", 30}),
ets:insert(my_ets_table, {user2, "Bob", 25}).

% 创建并打开一个DETS表(存储到本地文件)
dets:open_file(my_dets_table, [{file, "my_dets.dets"}, {type, set}]),
dets:insert(my_dets_table, {product1, "Laptop", 999}),
dets:insert(my_dets_table, {product2, "Phone", 599}).

第二步:附着到运行中的节点

打开另一个终端,启动一个新的Erlang节点,用相同的Cookie直接附着到目标节点。这里用-remsh参数可以一步进入目标节点的Shell:

erl -sname debugger_node -setcookie mysecretcookie -remsh my_running_app@your_hostname

提示:把your_hostname换成你的机器实际主机名,不确定的话可以在目标节点里运行node()查看完整的节点名称(比如my_running_app@localhost)。

第三步:查看ETS表

附着成功后,你就可以在当前Shell里直接操作ETS表了:

% 列出所有当前存在的ETS表
ets:all().
% 输出里会包含我们创建的my_ets_table

% 查看指定ETS表的详细信息(类型、大小、所有者等)
ets:info(my_ets_table).

% 进入交互式查看界面(按q退出,支持分页和搜索)
ets:i(my_ets_table).

% 直接把表内容转成列表输出
ets:tab2list(my_ets_table).

第四步:查看DETS表

DETS是磁盘存储的表,操作方式和ETS类似,只是需要确保表处于打开状态:

% 列出所有当前打开的DETS表
dets:all().

% 查看DETS表的详细信息
dets:info(my_dets_table).

% 输出表的所有内容
dets:tab2list(my_dets_table).

新手注意事项

  • 如果ETS表创建时用了private属性,只有创建它的进程能访问,外部节点看不到;要让附着节点能读取,创建时记得加public或protected属性。
  • 两个节点的Cookie必须完全一致,否则无法建立连接。你可以在目标节点里用erlang:get_cookie()查看当前Cookie值。
  • DETS表如果已经被关闭,需要先用dets:open_file(my_dets_table, [{file, "my_dets.dets"}])重新打开才能查看。

内容的提问来源于stack exchange,提问作者Andrey Panin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:18:03