E4.IO.pry/0-IO.break!/1動態打點調試

IO.pry/0

IO.inspect只能在靜態地列印指定的變數,Elixir的shell還可以使用IO.pry/0IO.break!/1實現更靈活的調試方法。

假如你想查看一下函數的某個位置到底發生了什麼,你可以直接在該位置使用IO.pry/0宏。它可以讓你直接查看綁定的變數及狀態。

E4_1

可以直觀地看到pry啟動了一個新的shell繼承了前一個shell中的變數及狀態,當你在pry shell中靈活的觀察各種狀態,比IO.inspect只能靜態列印某個值更加方便。不過當進入pry shell後,原進程就堵塞住,你必須使用IEx.Helpers.respawn/0返回到原shell中繼續執行。

IO.break!/1

雖然IO.pry/0很靈活,但這還是需要在原來的程式碼上加上調試的程式碼。還有一個更強大的!IO.break!/1可以讓人在任何程式碼上設置和管理斷點,而且無需修改源程式碼。

E4_2

必須要有源程式碼,才能做到break進入源碼。所以我們把Example保存為ex文件再試試:

E4_3