我刚开始使用Elixir,并开始了凤凰城项目,我非常喜欢。 现在有了rails后台,我习惯于被调试工具所破坏,比如“debugger”,“byebug”等等;我想知道Elixir是否有类似的工具?你们是如何调试Elixir应用程序的?
甚至相当于Rubys raise my_object.inspect
,也会有奇迹!
谢谢
答案 0 :(得分:71)
您可以使用IEx
require IEx
value = {:some, :erlang, :value}
IEx.pry
如果您使用例如iex -s program.exs
(或项目的iex -S mix
)启动此程序,系统会询问您是否允许在到达此代码时允许窥探此代码并{{1}将供您检查。
您也可以使用value
进行打印调试,以便输出基本上任何erlang数据结构。
答案 1 :(得分:31)
调试牛仔应用和凤凰应用。
我在Elixir rader http://www.jessetrimble.net/iex-pry-elixir中看到了这篇文章,并认为我会在这里总结一下,因为它非常方便: - )。
在Rails应用程序(和其他)中,您可以简单地在控制器中放入调试器标记,并且当路径被触发时,它将在调试器标记处中断。
在凤凰城使用撬时,上面会产生
Cannot pry #PID<0.259.0> at web/controllers/posts_controller.ex:8. Is an IEx shell running?
事实证明,Phoenix进程必须在IEx会话中运行,这样做
iex -S mix phoenix.server
现在你会看到
Request to pry #PID<0.266.0> at web/controllers/posts_controller.ex:9. Allow? [Yn]
答案 2 :(得分:10)
您可以使用https://github.com/qhool/quaff
中的Quaff.Debug
模块
Debug模块提供了一个用于运行Elixir的简单帮助程序接口 erlang图形化调试器中的代码
我今天用Elixir 1.0.4进行了测试,它有效。
答案 3 :(得分:1)
使用Erlang调试器。 使用Phoenix 1.3和Elixir 1.5.1的示例,源文件:./ lib / todo / api / api.ex,模块名称为:Todo.API
~/elixir/todo_app/ iex -S mix phx.server
Erlang/OTP 20 [erts-9.0] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]
[info] Running TodoWeb.Endpoint with Cowboy using http://0.0.0.0:4000
Interactive Elixir (1.5.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :debugger.start()
{:ok, #PID<0.373.0>}
iex(2)> :int.ni(Todo.API)
{:module, Todo.API}
在Erlang调试器中:
答案 4 :(得分:1)
在Elixir 1.5和OTP 20中,有一个新函数Exception.blame/3
可以将调试信息添加到某些异常中。它现在只支持FunctionClauseErrors
,你应该只在开发中使用它,因为它是一项昂贵的任务:该函数将从字节码中检索可用的子句并根据给定的参数对它们进行评估。 See Release
答案 5 :(得分:0)
有一种类似于byebug的测试调试方法:使用命令iex -S mix test
,这将运行您的测试,如果遇到IEx.pry
,它将询问您是否要在此“停止”并分析其上下文。
代码示例:
defmodule AppTest do
def hello do
test_variable = "john doe"
require IEx; IEx.pry
:world
end
end
defmodule AppTestTest do
use ExUnit.Case
doctest AppTest
test "greets the world" do
assert AppTest.hello() == :world
end
end
正在运行iex -S mix test
,它将在require IEx; IEx.pry
中停止。
来源:https://elixirforum.com/t/how-to-debug-exunit-tests-with-debugger/14170/4