如何通过vscode进行Elixir语言开发与调试【教程】
发布时间 - 2026-01-18 00:00:00 点击率:次安装Elixir和Erlang是调试前提,需用asdf(Mac)、官方安装包(Win)或源码编译(Linux)确保版本兼容;启用ElixirLS插件并打开含mix.exs的根目录;launch.json须配置mix task模式;断点失效主因是未编译、模块未加载或编码问题。
安装 Elixir 和 Erlang 运行时是调试的前提
VS Code 本身不提供 Elixir 运行能力,elixir 和 erlang 必须提前装好,否则所有插件都会报错或无法启动调试器。Mac 用户用 asdf 最稳妥,Windows 用户推荐官方 otp_win64.exe + elixir-windows-setup.exe 组合;Linux 用户避免用系统包管理器(如 apt install elixir),容易装到过旧版本。
验证是否就位:
elixir --version erl -version
两者都应输出有效版本号,且 erl 版本需与当前 Elixir 兼容(例如 Elixir 1.17 要求 OTP 26+)。不匹配会导致 mix test 卡住、Debugger 启动失败但无明确提示。
必须启用 ElixirLS 插件并配置正确的 projectRoot
VS Code 官方市场中唯一被社区广泛验证的 Elixir 插件是 elixir-lsp.elixir-ls。它不是“语法高亮工具”,而是基于 Language Server Protocol 的完整开发后端,提供跳转、补全、格式化和调试支持。
常见问题集中在工作区配置上:
- 打开的是子目录(比如只打开了
lib/),插件找不到mix.exs,会静默禁用调试功能 -
mix.exs存在但项目未执行过mix deps.get,插件会反复提示 “Project not compiled”,此时断点全部失效 - 工作区设置了
"elixirLS.projectRoot": "./some-other-dir",但路径错误或指向非 Mix 项目,调试器根本不会加载
正确做法:用 VS Code 打开包含 mix.exs 的根目录,确保终端中能成功运行 mix compile。
调试配置 launch.json 必须用 mix task 模式
Elixir 没有传统意义上的“单文件运行”,调试入口只能是 mix 任务。VS Code 的 .vscode/launch.json 中不能写 "program": "lib/my_app.ex",必须指定 task 字段。
典型可用配置:
{
"version": "0.2.0",
"configurations": [
{
"type": "elixir-ls",
"request": "launch",
"name": "Mix Task: run",
"task": "run",
"taskArgs": ["--no-halt"],
"projectDir": "${workspaceFolder}"
},
{
"type": "elixir-ls",
"request": "launch",
"name": "Mix Test: current file",
"task": "test",
"taskArgs": ["${fileBasenameNoExtension}"],
"projectDir": "${workspaceFolder}"
}
]
}
注意点:
-
"task": "test"是调试测试的标准方式,${fileBasenameNoExtension}会自动提取当前打开的test/some_test.exs对应的模块名 - 不要手动填
"taskArgs": ["test/test_helper.exs"]—— 这会触发整个测试套件,且无法定位到当前文件 - 如果项目用了
Phoenix,"task": "phx.server"可用,但需确认mix phx.server在终端中能正常启动,否则调试器卡在 “Starting” 状态
断点失效或跳转不到源码的三个高频原因
即使配置全对,断点仍可能灰掉或运行时不命中。核心原因是 Elixir 编译产物(.beam)与源

排查顺序如下:
- 检查当前文件是否已被编译:运行
mix compile,观察终端是否输出新编译的模块;若提示 “up to date”,尝试删掉_build/目录重编 - 确认断点所在模块已加载:在调试控制台中执行
:observer.start(),查看 “Applications” 或 “Processes” 标签页里是否有你的应用名;没有说明mix任务没真正跑起来 - 检查文件编码和换行符:Windows 上用 CRLF 保存的
.ex文件,在某些 OTP 版本下会导致解析失败,断点位置偏移;统一用 LF 保存(VS Code 右下角可切换)
最隐蔽的问题是:你加了断点的函数是被 defdelegate 转发的,而断点只能打在实际实现处,委托定义行本身不会停。
# linux
# vscode
# js
# json
# windows
# 编码
# app
# 工具
# 后端
# mac
# win
# vs code
# r语言
# erlang
# date
# 委托
# 加载
# 调试器
# 跳转
# 中能
# 的是
# 找不到
# 已被
# 用了
# 问题是
# 到过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用已有域名快速搭建网站?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
高端网站建设与定制开发一站式解决方案 中企动力
Laravel如何实现用户密码重置功能?(完整流程代码)
高防服务器租用指南:配置选择与快速部署攻略
QQ浏览器网页版登录入口 个人中心在线进入
js代码实现下拉菜单【推荐】
中山网站制作网页,中山新生登记系统登记流程?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel如何配置任务调度?(Cron Job示例)
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
香港服务器如何优化才能显著提升网站加载速度?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
EditPlus中的正则表达式实战(5)
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
香港服务器部署网站为何提示未备案?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
javascript读取文本节点方法小结
HTML 中动态设置元素 name 属性的正确语法详解
魔方云NAT建站如何实现端口转发?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Swift开发中switch语句值绑定模式
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
微信h5制作网站有哪些,免费微信H5页面制作工具?
怎么用AI帮你为初创公司进行市场定位分析?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何在局域网内绑定自建网站域名?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Java垃圾回收器的方法和原理总结
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
再谈Python中的字符串与字符编码(推荐)
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
奇安信“盘古石”团队突破 iOS 26.1 提权
进行网站优化必须要坚持的四大原则
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel如何配置和使用缓存?(Redis代码示例)
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
教你用AI将一段旋律扩展成一首完整的曲子
个人网站制作流程图片大全,个人网站如何注销?

