VSCode运行Erlang/Elixir:分布式节点的远程调试策略

老敏姑娘_2133

老敏姑娘_2133

2026-06-20

364人浏览

原创

vscode调试分布式elixir/erlang节点必须使用type: "erlang"而非"mix_task",因后者仅启动单节点隔离环境,node.self()返回:nonode@nohost导致node.connect/1静默失败;而erlang-ls的"erlang"类型通过erl启动带名节点并注入调试钩子,配合正确配置的node、setcookie、startfun等字段,才能可视化多节点通信与otp进程状态。

vscode运行erlang/elixir:分布式节点的远程调试策略

erlang-ls 的 launch.json 必须用 type: "erlang",不是 "mix_task"

VSCode 里调试分布式 Elixir/Erlang 节点,type: "mix_task" 是陷阱。它启动的是单节点、无名、Node.self() 返回 :nonode@nohost 的隔离环境,所有 Node.connect/1 静默失败,Node.list() 永远为空。

真正能看见多节点通信、进程消息队列、端口监听状态的,只有 erlang-ls 提供的 type: "erlang" 调试器。它底层调用 erl 启动带名节点,并注入调试钩子。

  • node 字段必须是完整节点名,如 "test@127.0.0.1" 或远程主机可解析的域名(不能只写 "test")
  • setcookie 值必须与目标节点完全一致,大小写敏感,且不能含空格或特殊字符
  • startFun 推荐设为 "application:start",startArgs 传入应用名原子列表,如 "[myapp]"
  • 若需手动触发分布式初始化,可在 startFun 中写 "rpc:call('other@host', application, start, [myapp])",但前提是两节点已连通

远程节点必须先手动启动并验证连通性

VSCode 不负责启动远程 Erlang 节点,只 attach 到已运行的节点。你得先在远程机器上跑通这行命令:

erl -name myapp@remote.host -setcookie abc -hidden -noshell -s application start myapp

然后本地验证是否能连上:

VSCode
VSCode

避免常见的 VSCode 错误——设置冲突、调试器配置和扩展冲突。

下载
  • 本地终端执行 erl -name test@127.0.0.1 -setcookie abc,进 shell 后运行 net_adm:ping('myapp@remote.host'). → 返回 pong 才算通
  • 检查远程防火墙:EPMD 端口(默认 4369)和 Erlang 分布式端口段(默认 9000-9100)必须放行
  • 确认远程主机的 /etc/hosts 或 DNS 能反向解析 myapp@remote.host 的 IP,ping remote.host 必须通
  • 远程节点不能加 -hidden 参数?那得去掉——-hidden 节点不注册到 EPMD,本地根本发现不了它

vscode 集成终端里启动远程节点时,PATH 和 erl 版本容易错配

你在 VSCode 终端里 ssh 连远程并执行 erl -name ...,看似简单,实则常因环境变量失效而失败。常见现象是:crypto:start() 报错、ssl:start() 找不到模块、甚至 erl 命令本身不存在。

  • 别依赖远程 shell 的 ~/.zshrc —— ssh 非交互式登录不加载它;改用 ssh user@host 'bash -l -c "erl -version"' 强制加载 login shell
  • 远程 which erl 返回的路径,要和本地 erlang.erlPath 配置一致;否则 erlang-ls 会尝试用本地 erl 去解析远程 BEAM 字节码,版本不兼容直接崩溃
  • OTP 版本必须严格一致:远程是 26.3,本地 erl 也得是 26.3;混用 25.x 和 26.x 会导致 :beam_lib.chunks/2 解析失败,调试器卡死在 “Connecting…”
  • Mac 上用 asdf?确保远程也装了 asdf,并执行 asdf reshim erlang,否则 erl 软链接可能指向旧版

调试器连上了,但 Processes 标签页空、Node.list() 不返回远程节点

这是最让人抓狂的假连通:VSCode 显示 “Debug session started”,断点也能命中,但看不到 OTP 进程树、收不到消息日志、Node.list() 只有本地节点——说明分布式上下文根本没激活。

  • 检查 launch.json 里是否漏了 "node" 字段;没有它,erlang-ls 默认以 nonode@nohost 启动,和 mix_task 一样废
  • 确认远程节点启动时用了 -name(非 -sname),-sname 节点无法跨网络通信,仅限 localhost
  • 本地节点和远程节点的 -setcookie 值是否真的一致?复制粘贴时容易多一个不可见空格;建议用 echo -n "abc" | md5sum 两端比对哈希
  • erlang-ls 的调试视图依赖 :observer.start/0 的底层接口;如果远程节点没启用 inets 或 stdlib 应用,进程树可能无法渲染——加个 -eval "application:ensure_all_started(inets)." 再试

分布式调试不是“配置完就能跑”,它要求每个环节的网络、命名、cookie、OTP 版本都咬合严丝合缝。少一个 @ 符号,或一次没清掉旧 EPMD 进程,就卡在无声失败里。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
erlang语言是什么
erlang语言是什么

erlang是一种并发、容错、分布式和动态类型的编程语言。它专门用于构建并发系统,并提供了一个轻量级进程模型来实现并发性。想了解更多erlang的相关内容,可以阅读本专题下面的文章。

2024.06.19

1338

9

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1933

5

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.07

2754

5

vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

1235

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

2552

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1869

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1707

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

2567

12

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1798

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程