IO.pry/0
IO.inspect只能在静态地打印指定的变量,Elixir的shell还可以使用IO.pry/0
与IO.break!/1
实现更灵活的调试方法。
假如你想查看一下函数的某个位置到底发生了什么,你可以直接在该位置使用IO.pry/0宏。它可以让你直接查看绑定的变量及状态。
可以直观地看到pry启动了一个新的shell继承了前一个shell中的变量及状态,当你在pry shell中灵活的观察各种状态,比IO.inspect只能静态打印某个值更加方便。不过当进入pry shell后,原进程就堵塞住,你必须使用IEx.Helpers.respawn/0返回到原shell中继续执行。
IO.break!/1
虽然IO.pry/0
很灵活,但这还是需要在原来的代码上加上调试的代码。还有一个更强大的!IO.break!/1
可以让人在任何代码上设置和管理断点,而且无需修改源代码。
必须要有源代码,才能做到break进入源码。所以我们把Example保存为ex文件再试试: