我刚刚开始使用Elixir,并且已经启动了Phoenix项目,我对此非常满意。现在,有了Rails背景知识,我就习惯了调试工具,例如“ debugger”,“ byebug”等;我想知道是否有用于Elixir的类似工具?你们如何调试Elixir应用程序?
甚至与Rubys一样raise my_object.inspect
,也会产生奇迹!
谢谢
我刚刚开始使用Elixir,并且已经启动了Phoenix项目,我对此非常满意。现在,有了Rails背景知识,我就习惯了调试工具,例如“ debugger”,“ byebug”等;我想知道是否有用于Elixir的类似工具?你们如何调试Elixir应用程序?
甚至与Rubys一样raise my_object.inspect
,也会产生奇迹!
谢谢
:observer.start
(在IEx上运行)。它是调试和探索正在运行的应用程序的好工具。
Answers:
您可以使用 IEx
require IEx
value = {:some, :erlang, :value}
IEx.pry
例如,如果您以iex -s program.exs
(或iex -S mix
针对某个项目)启动该程序,系统将询问您是否要允许在到达该代码时撬入该代码,并value
可供您检查。
您还可以使用IO.inspect
基本上允许您输出任何erlang数据结构的方式来进行打印调试。
foo(bar, baz)
,则可以直接添加,foo(IO.inspect(bar), baz)
并且所有内容的行为都相同。
iex.bat --werl -S mix phoenix.server
调试Cowboy应用程序和Phoenix应用程序。
我在Elixir Rader中看到了这个帖子 网站http://www.jessetrimble.net/iex-pry-elixir中,并认为我会在这里进行总结,因为它非常方便:-)。
在Rails应用程序(和其他应用程序)中,您可以简单地在控制器中放入debugger标签,并且当路径被触发时,它将在debugger标签处中断。
在Phoenix中使用撬动时,以上结果将导致
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]
phoenix.start
已被替换phoenix.server
您可以Quaff.Debug
从https://github.com/qhool/quaff使用 模块
调试模块提供了一个简单的帮助程序界面,用于在erlang图形调试器中运行Elixir代码
我今天用Elixir 1.0.4对其进行了测试,它可以正常工作。
使用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调试器中:
有一种方法可以像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