E3.IO.inspect万金油调试利器

IO.inspect/2可以把调试信息直接打印到控制台上,简单易用,是不可或缺的调试好帮手。

基本使用

它可以打印任何的数据类型,并且可以定制protocol来打印自定义的数据。

E3_0

对比IO.puts,它能直接打印的数据类型就少得多了,比如:基本的数据类型,原子,字符串,IODataIO.puts返回值为ok

E3_2

所以IO.inspect调试时能随意打印任何数据结构是多么的棒!

使用Label选项

最棒的是此函数可以保持返回值就是输入,这可以在代码的任何地方加入它,且不影响原有代码逻辑。比如:

E3_3

  1. IO.inspect 可以加入label选项,他会直接把label对应内容打印在最前面。
  2. 使用String.split/3正则分割字符串。

使用Limit选项

限制打印的长度,允许输入0-N,或者:infinity

E3_5

Kernel.inspect/2

还有一个与IO.inspect非常相似的函数,它就是Kernel.inspect/2, 这个函数不会把数据打到控制台上,它只是把参数stringify化,比如:

E3_4

iex> inspect(:foo)
    ":foo"
iex> inspect([1, 2, 3, 4, 5], limit: 3)
    "[1, 2, 3, ...]"
iex> inspect([1, 2, 3], pretty: true, width: 0)
    "[1,\n 2,\n 3]"
iex> inspect("olá" <> <<0>>)
    "<<111, 108, 195, 161, 0>>"
iex> inspect("olá" <> <<0>>, binaries: :as_strings)
    "\"olá\\0\""
iex> inspect("olá", binaries: :as_binaries)
    "<<111, 108, 195, 161>>"
iex> inspect('bar')
    "'bar'"
iex> inspect([0 | 'bar'])
    "[0, 98, 97, 114]"
iex> inspect(100, base: :octal)
    "0o144"
iex> inspect(100, base: :hex)
    "0x64"