Spec-Zone.ru › Tokio

Структура Trace

pub struct Trace { /* private fields */ }
Доступно только на tokio_unstable и Linux, при включённых возможностях crate rt и crate taskdump, а также на (AArch64 или s390x или x86 или x86-64).

Трассировка выполнения последнего опроса задачи.

Разрешение обратной трассировки — через реализацию Display или через resolve_backtraces — разбирает отладочную информацию, что может быть ресурсоёмкой для процессора операцией и занимать довольно много времени, зависящего от платформы; часто это более 100 миллисекунд, особенно если исполняемый файл текущего процесса велик. В некоторых случаях платформа может кэшировать часть отладочной информации внутри себя, поэтому последующие вызовы resolve_backtraces могут выполняться быстрее первого, но все гарантии зависят от платформы.

Чтобы не блокировать среду выполнения, рекомендуется разрешать обратные трассировки внутри spawn_blocking() и использовать механизм ограничения параллелизма, чтобы избежать неожиданного снижения производительности.

См. Handle::dump.

Реализации

impl Trace

pub fn resolve_backtraces(&self) -> Vec<Backtrace>

Разрешает и возвращает список обратных трассировок, связанных с опросами в этой трассировке.

Точный набор включённых сюда обратных трассировок не гарантирован и может измениться в будущем, но можно ожидать по одному элементу Backtrace для каждого вызова poll нижнеуровневой будущей задачи Tokio; поэтому, если используется что-то вроде join!, для каждой будущей задачи в объединении будет своя обратная трассировка.

pub fn capture<F, R>(f: F) -> (R, Trace)
where F: FnOnce() -> R,

Выполняет функцию f в режиме трассировки и возвращает её результат вместе с полученной Trace.

Обычно в качестве f передают функцию опроса будущей задачи; возвращённая обратная трассировка покажет, чем занимается эта будущая задача.

Используйте вместо этого Handle::dump, если хотите узнать, чем заняты все задачи вашей программы. Дополнительные сведения о дампах см. также в Handle::dump; однако, в отличие от Handle::dump, эта функция не должна быть намного медленнее прямого вызова f.

Из-за особенностей реализации трассировки конечные будущие задачи Tokio обычно вместо выполнения своей фактической работы возвращают Poll::Pending, не регистрируя пробуждатель задачи ни в одном драйвере. Это означает, что выполнение, вероятно, не будет продвигаться, если в итоге не вызвать будущую задачу вне capture или явно не запланировать задачу повторно (например, вызвав cx.waker().wake_by_ref()) после возврата capture.

Пример использования:

use std::future::Future;
use std::task::Poll;
use tokio::runtime::dump::Trace;

// some future
let mut test_future = std::pin::pin!(async move { tokio::task::yield_now().await; 0 });

// trace it once, see what it's doing
let (trace, res) = Trace::root(std::future::poll_fn(|cx| {
    let (res, trace) = Trace::capture(|| test_future.as_mut().poll(cx));
    Poll::Ready((trace, res))
})).await;

// await it to let it finish, outside of a `capture`
let output = match res {
   Poll::Ready(output) => output,
   Poll::Pending => test_future.await,
};

println!("{trace}");
Вложенные вызовы

Вложенные вызовы capture могут возвращать частичные трассировки, но не приведут к другому нежелательному поведению (например, не вызовут панику).

pub fn root<F>(f: F) -> Root<F> ⓘ
where F: Future,

Создаёт корень для стековых трассировок, полученных с помощью Trace::capture. Кадры стека выше корня не будут захвачены.

Допускается вкладывать несколько будущих задач Root. Захват остановится на первом корне. Также допустимо не использовать Root, но в этом случае нет гарантии, где остановится захват.

Реализации трейтов

impl Debug for Trace

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматтера. Подробнее

impl Display for Trace

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматтера. Подробнее

Реализации автоматических трейтов

impl Freeze for Trace

impl RefUnwindSafe for Trace

impl Send for Trace

impl Sync for Trace

impl Unpin for Trace

impl UnsafeUnpin for Trace

impl UnwindSafe for Trace

Общие реализации

impl<T> Any for T
where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

Возвращает TypeId для self. Подробнее

impl<T> Borrow<T> for T
where T: ?Sized,

fn borrow(&self) -> &T

Неизменяемо заимствует значение, находящееся во владении. Подробнее

impl<T> BorrowMut<T> for T
where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

Изменяемо заимствует значение, находящееся во владении. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью переданного Span и возвращает обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span и возвращает обёртку Instrumented. Подробнее

impl<T, U> Into<U> for T
where U: From<T>,

fn into(self) -> U

Вызывает U::from(self).

Иными словами, это преобразование выполняет то, что выберет реализация From<T> for U.

impl<T> ToString for T
where T: Display + ?Sized,

fn to_string(&self) -> String

Преобразует заданное значение в String. Подробнее

impl<T, U> TryFrom<U> for T
where U: Into<T>,

type Error = Infallible

Тип, возвращаемый при ошибке преобразования.

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Выполняет преобразование.

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error

Тип, возвращаемый при ошибке преобразования.

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/runtime/dump/struct.Trace.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API