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文件再試試: