rustrust-cargonightly-buildrustup

Can't use `-Z macro-backtrace` unstable option with `cargo`


I am writing rust macros and came across an error about my macro I can't understand. In hope of understanding it better, I tried to follow the compiler's advice by setting the -Z macro-backtrace unstable option and compiling again. Here is said advice:

note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

But doing this:

cargo run -Z macro-backtrace

Results in this:

error: unknown `-Z` flag specified: macro-backtrace

I already switched to the nightly toolchain entirely by running rustup override nightly in the project directory and rustup default nightly for future uses of this feature, but still the error presists.

In diggin through the web, I found a way to list all -Z options with cargo -Z help:


Available unstable (nightly-only) flags:

    -Z avoid-dev-deps   -- Avoid installing dev-dependencies if possible
    -Z minimal-versions -- Install minimal dependency versions instead of maximum
    -Z no-index-update  -- Do not update the registry, avoids a network request for benchmarking
    -Z unstable-options -- Allow the usage of unstable options
    -Z timings          -- Display concurrency information
    -Z doctest-xcompile -- Compile and run doctests for non-host target using runner config
    -Z terminal-width   -- Provide a terminal width to rustc for error truncation

Run with 'cargo -Z [FLAG] [SUBCOMMAND]'

See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html for more information about these flags.

No -Z macro-backtrace... I went to the specified link, butr even there a search for macro-backtrace yields no results.

So I am stuck... I would pretty much like to use this feature and yet can't seem to find a way to activate it.

Any help will be appreciated.


Solution

  • -Z macro-backtrace is a rustc flag, not a cargo flag. You should be able to pass it to rustc using cargo +nightly rustc -- -Z macro-backtrace. (The +nightly in the command line is optional if you already switched to the nightly compiler as the default.)

    Alternatively, you can set the RUSTFLAGS environment variable:

    export RUSTFLAGS="-Z macro-backtrace"