Console 开发日记 #1
2021 年 9 月 8 日
自从几个月前 Tokio Console 原型开始以来,我们一直努力将其转变为一个很棒的异步任务调试器。我们想提供一些关于其进展情况的集中更新。
什么是 Console?
哇!厉害了!它就像用于任务的
top(1)
!
Console 是一个 Rust 异步调试工具。目标是使其成为您在尝试更好地理解异步任务行为时使用的工具。它利用了 tracing
事件和 span,因此旨在成为运行时无关的。
更新
简单的 init
和 Builder
: 我们让向您的应用程序添加 instrumentation 变得更加容易。对于大多数人来说,只需将 console_subscriber::init()
添加到 main
函数的顶部就足够了!它将使用合理的默认值,检查一些环境变量以进行自定义并构建一个隔离的 subscriber。如果您需要更多控制来与现有的 tracing
或运行时集成,还有一个方便的 console_subscriber::Builder
API。
一切都更漂亮了! 主列表视图看起来好多了。我们将任务“名称”作为头等大事,在列表中为它们设置了自己的列。任务 ID 变得更漂亮,并且与用户期望的更加一致。颜色和 UTF-8 的使用也得到了改进,默认情况下会检查终端支持的内容。例如,显示持续时间的字段对于不同的数量级(纳秒 vs 毫秒 vs 秒)使用略微不同的颜色。
您可以选择一个任务以查看“任务详情”视图。 其中包括有关该任务的更多详细信息和指标。这里有一个任务的所有 poll 时间的图形直方图,让您了解任务在 yielding 之前需要多长时间才能完成工作。还有关于任务被唤醒次数的信息,您可以将其与 polled 的次数以及自上次唤醒调用以来的时间进行比较。
时间性: 在与用户交谈后,我们优先考虑了控制台的一些“时间控制”功能。到目前为止,我们已经实现了暂停控制台(并且仍然可以浏览现有任务)然后恢复到“实时”的能力。现在可以选择将所有相关事件记录到磁盘上的文件中,目标是能够在 console
中重放该文件。
视频演示: 我们制作了一个 演示展示控制台,以及如何使用它来调试一些常见的任务行为不端的情况。
感谢...
- Eliza Weisman
- Sean McArthur
- Zahari Dichev
- Oğuz Bilgener
- @gneito
- @memoryruins
- Jacob Rothstein
- Artem Vorotnikov
- David Barsky
- Wu Aoxiang
我们还要感谢所有在您的应用程序中试用它并给我们宝贵反馈的人!