调试 Elixir 流

dev*_*leo 1 elixir

我是 Elixir 的新手,我想学习如何更好地调试Streams

在我的工作中,对大型数据集执行操作是很常见的。这意味着在最终操作(通常是Enum.sum().

但不幸的是,这意味着几个调用看起来难以辨认,因为它们由几个未记录的函数组成Stream.map。(我们目前正在解决的问题)。我想查看数据从一个流传递到另一个流时的状态以进行调试。这通常是如何实现的?

例子:

SomeModule.some_large_call_that_returns_a_stream()
|> Stream.map(some_huge_hard_to_read_thing)
|> Stream.map(some_huge_hard_to_read_thing)
|> Stream.map(some_huge_hard_to_read_thing)
|> Enum.sum()

Run Code Online (Sandbox Code Playgroud)

查看结果很难进行调试,尤其是在Enum.sum()返回无值或返回 0 的情况下。

有什么建议么?而且调试器目前对我来说不可用。

Koc*_*ber 6

IO.inspect/2从连接到管道开始就足够了吗?IE:

SomeModule.some_large_call_that_returns_a_stream()
|> Stream.map(some_huge_hard_to_read_thing)
|> Stream.map(some_huge_hard_to_read_thing)
|> Stream.map(&IO.inspect/1)
|> Stream.map(some_huge_hard_to_read_thing)
|> Enum.sum()
Run Code Online (Sandbox Code Playgroud)