悠悠楠杉
如何在VSCode中调试Elixir代码及运行Erlang虚拟机
一、为什么选择VSCode开发Elixir?
作为函数式编程的新锐语言,Elixir凭借Erlang虚拟机的并发优势正在快速崛起。但相比传统IDE,VSCode的轻量化特性配合正确配置后,能提供:
- 实时语法检查
- 智能代码补全
- 交互式调试
- 热代码重载
二、环境准备
必要组件
- Elixir 1.10+ 和 Erlang/OTP 23+
bash # macOS用户推荐 brew install elixir
- VSCode 最新稳定版
- 扩展插件:
- ElixirLS(核心工具集)
- Erlang Formatter(代码格式化)
注意:避免同时安装其他Elixir插件,可能导致冲突
三、调试配置详解
1. 项目初始化
bash
mix new my_project && cd my_project
code .
2. launch.json配置
在.vscode/launch.json
中添加:
json
{
"version": "0.2.0",
"configurations": [
{
"type": "mix_task",
"name": "Run tests",
"request": "launch",
"task": "test",
"projectDir": "${workspaceRoot}"
},
{
"type": "mix_task",
"name": "Run IEx",
"request": "launch",
"task": "iex",
"args": ["-S", "mix"],
"projectDir": "${workspaceRoot}"
}
]
}
3. 断点调试技巧
- 在函数定义行号左侧点击设置断点
- 按F5启动调试时选择对应配置
- 使用调试控制台查看变量状态
四、Erlang虚拟机交互指南
1. 集成IEx会话
- 通过
launch.json
配置启动IEx - 在调试控制台输入:
elixir :observer.start() # 调出Erlang性能监控面板
2. 混合编译调试
elixir
在模块中添加调试语句
require IEx
defmodule MyModule do
def func do
IEx.pry() # 执行到此处会暂停
end
end
五、常见问题排查
1. 插件无法启动
- 检查ElixirLS输出窗口
- 删除
_build
和deps
目录后重新编译
2. 断点不生效
- 确认代码已保存在硬盘
- 检查mix.lock是否与依赖版本匹配
3. 性能优化
elixir
config/dev.exs 添加
config :elixirlsutils,
enabledebugger: true,
autoupdate_deps: :never
六、进阶技巧
- 远程调试:
bash iex --name debug@127.0.0.1 --cookie mysecret -S mix
- 内存分析:
elixir :recon_alloc.allocators(:current)
- 热代码升级:
elixir :sys.suspend(Process.whereis(MyApp)) {_, _, beam} = :code.get_object_code(MyModule) :code.load_binary(MyModule, 'my_module.beam', beam) :sys.change_code(MyApp, MyModule, "1.0.0", [])
实践建议:定期执行
mix deps.clean --all && mix deps.get
保持依赖清洁,遇到异常时查看:sys.get_status(pid)
获取进程状态。更多技巧可参考Elixir官方调试手册。