调试 Elixir 流

Debugging Elixir streams

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

在我工作的地方对大型数据集执行操作很常见。这意味着在最后的操作之前,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()

查看结果很难调试,特别是如果 Enum.sum() returns 没有值或 0。

有什么建议吗? And the debugger is currently unavailable to me.

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

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()