Console 开发日记 #1

2021 年 9 月 8 日

自从几个月前 Tokio Console 原型开始以来,我们一直努力将其转变为一个很棒的异步任务调试器。我们想提供一些关于其进展情况的集中更新。

什么是 Console?

哇!厉害了!它就像用于任务的 top(1)

Console 是一个 Rust 异步调试工具。目标是使其成为您在尝试更好地理解异步任务行为时使用的工具。它利用了 tracing 事件和 span,因此旨在成为运行时无关的。

更新

简单的 initBuilder 我们让向您的应用程序添加 instrumentation 变得更加容易。对于大多数人来说,只需将 console_subscriber::init() 添加到 main 函数的顶部就足够了!它将使用合理的默认值,检查一些环境变量以进行自定义并构建一个隔离的 subscriber。如果您需要更多控制来与现有的 tracing 或运行时集成,还有一个方便的 console_subscriber::Builder API。

task list screenshot

一切都更漂亮了! 主列表视图看起来好多了。我们将任务“名称”作为头等大事,在列表中为它们设置了自己的列。任务 ID 变得更漂亮,并且与用户期望的更加一致。颜色和 UTF-8 的使用也得到了改进,默认情况下会检查终端支持的内容。例如,显示持续时间的字段对于不同的数量级(纳秒 vs 毫秒 vs 秒)使用略微不同的颜色。

task details screenshot

您可以选择一个任务以查看“任务详情”视图。 其中包括有关该任务的更多详细信息和指标。这里有一个任务的所有 poll 时间的图形直方图,让您了解任务在 yielding 之前需要多长时间才能完成工作。还有关于任务被唤醒次数的信息,您可以将其与 polled 的次数以及自上次唤醒调用以来的时间进行比较。

时间性: 在与用户交谈后,我们优先考虑了控制台的一些“时间控制”功能。到目前为止,我们已经实现了暂停控制台(并且仍然可以浏览现有任务)然后恢复到“实时”的能力。现在可以选择将所有相关事件记录到磁盘上的文件中,目标是能够在 console 中重放该文件。

视频演示: 我们制作了一个 演示展示控制台,以及如何使用它来调试一些常见的任务行为不端的情况。

感谢...

  • Eliza Weisman
  • Sean McArthur
  • Zahari Dichev
  • Oğuz Bilgener
  • @gneito
  • @memoryruins
  • Jacob Rothstein
  • Artem Vorotnikov
  • David Barsky
  • Wu Aoxiang

我们还要感谢所有在您的应用程序中试用它并给我们宝贵反馈的人!

还有 很多事情要做。 想加入我们吗?