Skip to content

Nested tracing calls while evaluating an argument of a span!() causes panics #93

Description

@Stypox

If an argument of a span!() call has a Debug implementation which in turn calls any tracing call (e.g. event!() or another span!()), tracing-tree panics. This happens in rustc, where in some cases the Debug implementation may have something to log, e.g. here->here->here.

Here is a minimum reproducible example, I'm using "tracing 0.1.44", "tracing-subscriber 0.3.22", "tracing-tree 0.4.1":

use std::fmt::{self, Debug, Formatter};
use tracing_subscriber::filter::{EnvFilter};
use tracing_subscriber::layer::{Layer, SubscriberExt};
use tracing_tree::HierarchicalLayer;

struct Baz {}

impl Debug for Baz {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        tracing::info!("Baz");
        f.debug_struct("Baz").finish()
    }
}

fn main() {
    let subscriber = tracing_subscriber::Registry::default()
        .with(HierarchicalLayer::default())
        .with(HierarchicalLayer::default().with_filter(EnvFilter::default()));

    tracing::subscriber::set_global_default(subscriber).unwrap();
    let obj = Baz {};
    let _s = tracing::info_span!("main", ?obj).entered();
}

When run, the program outputs main obj=Baz and then crashes. The crash seems to happen here, "in new_span but span does not exist": https://github.com/davidbarsky/tracing-tree/blob/main/src/lib.rs#L451

Here is the full backtrace
thread 'main' panicked at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-tree-0.4.1/src/lib.rs:451:33:
in new_span but span does not exist
stack backtrace:
   0:     0x55cd9d2f45d2 - std::backtrace_rs::backtrace::libunwind::trace::h2d45396358f41939
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
   1:     0x55cd9d2f45d2 - std::backtrace_rs::backtrace::trace_unsynchronized::hffcefc0b67f1d6e2
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
   2:     0x55cd9d2f45d2 - std::sys::backtrace::_print_fmt::hd72f71d23b436b92
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/sys/backtrace.rs:66:9
   3:     0x55cd9d2f45d2 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hdcfcb6d4c8489523
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/sys/backtrace.rs:39:26
   4:     0x55cd9d314e93 - core::fmt::rt::Argument::fmt::h2c56b3114963061a
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/fmt/rt.rs:173:76
   5:     0x55cd9d314e93 - core::fmt::write::h8a494366950f23bb
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/fmt/mod.rs:1468:25
   6:     0x55cd9d2f2153 - std::io::default_write_fmt::ha27fbccbc65eb6fa
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/io/mod.rs:639:11
   7:     0x55cd9d2f2153 - std::io::Write::write_fmt::h6556609fca33d0b1
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/io/mod.rs:1954:13
   8:     0x55cd9d2f4422 - std::sys::backtrace::BacktraceLock::print::hb2a626a81e06b2dc
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/sys/backtrace.rs:42:9
   9:     0x55cd9d2f54c3 - std::panicking::default_hook::{{closure}}::h4f78485264f12d10
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:300:27
  10:     0x55cd9d2f52a5 - std::panicking::default_hook::h2c66fc99e962531d
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:327:9
  11:     0x55cd9d2f5e95 - std::panicking::rust_panic_with_hook::h33ac55f64bbd807d
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:833:13
  12:     0x55cd9d2f5c2a - std::panicking::begin_panic_handler::{{closure}}::h30e7cb89678a57fe
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:706:13
  13:     0x55cd9d2f4ad9 - std::sys::backtrace::__rust_end_short_backtrace::hed60f27456c16ced
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/sys/backtrace.rs:174:18
  14:     0x55cd9d2f58bd - __rustc[de2ca18b4c54d5b8]::rust_begin_unwind
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:697:5
  15:     0x55cd9d312ea0 - core::panicking::panic_fmt::h62f63d096dd276af
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/panicking.rs:75:14
  16:     0x55cd9d312e7b - core::panicking::panic_display::h784ac6e2afc29348
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/panicking.rs:268:5
  17:     0x55cd9d312e7b - core::option::expect_failed::h091923fb77e757a1
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/option.rs:2139:5
  18:     0x55cd9d2477b9 - core::option::Option<T>::expect::h968ca79a9e2a7077
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/option.rs:964:21
  19:     0x55cd9d23ed80 - <tracing_tree::HierarchicalLayer<W,FT> as tracing_subscriber::layer::Layer<S>>::on_new_span::h30cbc804b11155c0
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-tree-0.4.1/src/lib.rs:451:33
  20:     0x55cd9d24839a - <tracing_subscriber::filter::layer_filters::Filtered<L,F,S> as tracing_subscriber::layer::Layer<S>>::on_new_span::{{closure}}::h24eac559e981011c
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.22/src/filter/layer_filters/mod.rs:797:24
  21:     0x55cd9d24961e - tracing_subscriber::filter::layer_filters::FilterState::did_enable::hea7b34f99e3a83ee
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.22/src/filter/layer_filters/mod.rs:1182:13
  22:     0x55cd9d249cc8 - tracing_subscriber::filter::layer_filters::Filtered<L,F,S>::did_enable::{{closure}}::hfc7b424bb96be0b1
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.22/src/filter/layer_filters/mod.rs:642:46
  23:     0x55cd9d23dd3c - std::thread::local::LocalKey<T>::try_with::h8be03692708e23d6
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:315:12
  24:     0x55cd9d23d9ce - std::thread::local::LocalKey<T>::with::h0c2098087f1fc898
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:279:20
  25:     0x55cd9d249ab4 - tracing_subscriber::filter::layer_filters::Filtered<L,F,S>::did_enable::h4a1704ea8881d75c
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.22/src/filter/layer_filters/mod.rs:642:19
  26:     0x55cd9d248294 - <tracing_subscriber::filter::layer_filters::Filtered<L,F,S> as tracing_subscriber::layer::Layer<S>>::on_new_span::hf386a22aa402b5db
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.22/src/filter/layer_filters/mod.rs:794:14
  27:     0x55cd9d239fca - <tracing_subscriber::layer::layered::Layered<L,S> as tracing_core::subscriber::Subscriber>::new_span::hfa8989f25ab0b390
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.22/src/layer/layered.rs:132:20
  28:     0x55cd9d2b96e9 - tracing_core::dispatcher::Dispatch::new_span::ha358db97f96d79fc
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.36/src/dispatcher.rs:556:27
  29:     0x55cd9d2b9e82 - tracing::span::Span::make_with::h2763a074ddee4d21
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-0.1.44/src/span.rs:570:27
  30:     0x55cd9d2b9e2a - tracing::span::Span::new_with::h2918edc731545635
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-0.1.44/src/span.rs:449:9
  31:     0x55cd9d2b9dcd - tracing::span::Span::new::{{closure}}::h385b77dc54d4bf06
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-0.1.44/src/span.rs:438:44
  32:     0x55cd9d2b918f - tracing_core::dispatcher::get_default::hefca37874147e2d7
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.36/src/dispatcher.rs:386:16
  33:     0x55cd9d2b9d95 - tracing::span::Span::new::h1760769531bdfc47
                               at ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-0.1.44/src/span.rs:438:9
  34:     0x55cd9d24c2c0 - nested::main::hd231becd0798c743
                               at ./src/bin/nested.rs:22:14
  35:     0x55cd9d24579b - core::ops::function::FnOnce::call_once::h29a67ba2ff45752a
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:253:5
  36:     0x55cd9d24d66e - std::sys::backtrace::__rust_begin_short_backtrace::h5751217f7821e998
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:158:18
  37:     0x55cd9d24a091 - std::rt::lang_start::{{closure}}::h2f32a6747d8e8123
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:206:18
  38:     0x55cd9d2ef0d0 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h638295a043b40957
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/ops/function.rs:290:21
  39:     0x55cd9d2ef0d0 - std::panicking::catch_unwind::do_call::hbd68098bdea1ca50
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:589:40
  40:     0x55cd9d2ef0d0 - std::panicking::catch_unwind::h50591d85bf847c7c
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:552:19
  41:     0x55cd9d2ef0d0 - std::panic::catch_unwind::h2487b4c4f2ae22c6
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panic.rs:359:14
  42:     0x55cd9d2ef0d0 - std::rt::lang_start_internal::{{closure}}::h61f0945cc6c9a811
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/rt.rs:175:24
  43:     0x55cd9d2ef0d0 - std::panicking::catch_unwind::do_call::h34b9c3722acd6bd1
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:589:40
  44:     0x55cd9d2ef0d0 - std::panicking::catch_unwind::hf9a822ea043fb0d6
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:552:19
  45:     0x55cd9d2ef0d0 - std::panic::catch_unwind::h5b3cac802237ed89
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panic.rs:359:14
  46:     0x55cd9d2ef0d0 - std::rt::lang_start_internal::h34f9328d113fd60a
                               at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/rt.rs:171:5
  47:     0x55cd9d24a077 - std::rt::lang_start::h336dcf9d50485b1f
                               at ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:205:5
  48:     0x55cd9d24c42e - main
  49:     0x7f4603593635 - <unknown>
  50:     0x7f46035936e9 - __libc_start_main
  51:     0x55cd9d238e85 - _start
  52:                0x0 - <unknown>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions