Elixir:
使用调试器

如何操作:

Elixir 自带一个名为 :debugger 的图形调试器。使用它,你需要启动它并连接到你正在运行的进程。

首先,确保你在一个 iex 会话中启动了 :debugger

iex> :debugger.start()
{:ok, #PID<0.108.0>}

现在,解释你想调试的代码模块:

iex> :int.ni(MyApp.MyModule)
{:module, MyApp.MyModule}

你可以设置一个断点:

iex> :int.break(MyApp.MyModule, line_number)
:ok

然后,运行你的函数以触发断点并逐步执行你的代码:

iex> MyApp.MyModule.my_function(arg1, arg2)
# 调试器会在带有断点的那一行暂停执行

深入探究

在 Elixir 的 :debugger 之前,Erlang 提供了 Elixir 使用的调试器;它在处理并发进程方面非常强大,这是 Erlang VM(BEAM)的一个优势。与某些其他调试器不同,由于 Elixir 中数据的不可变性,:debugger 不允许动态修改变量。至于替代方案,你有 IEx.pry,它允许你暂停执行,并在代码中的任何地方跳转到 REPL,这非常方便。

尽管 :debugger 适合图形界面,有些人可能更喜欢内置的 :observer 工具,它也提供进程检查和系统指标,尽管不专门针对逐步执行代码。Elixir 的社区也贡献了如 visualixirrexbug 等工具,扩展了调试工具的生态系统,超出了默认工具。

另见

  • 官方 Elixir 入门指南上的调试:https://elixir-lang.org/getting-started/debugging.html
  • Erlang 的 :debugger 文档:http://erlang.org/doc/apps/debugger/debugger_chapter.html
  • Elixir 论坛上关于调试技巧的讨论:https://elixirforum.com/c/elixir-questions/elixir-questions-questions-help/15