File tree Expand file tree Collapse file tree 2 files changed +37
-1
lines changed Expand file tree Collapse file tree 2 files changed +37
-1
lines changed Original file line number Diff line number Diff line change @@ -185,6 +185,40 @@ stack backtrace:
185185
186186Cool, now I have a backtrace for the error!
187187
188+ # # Getting the the error creation location
189+
190+ ` -Z track-diagnostics` can help figure out where errors are emitted. It uses ` # [track_caller]`
191+ for this and prints its location alongside the error:
192+
193+ ` ` ` bash
194+ $ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z track-diagnostics
195+ error[E0277]: cannot add ` ()` to ` {integer}`
196+ --> src\e rror.rs:2:7
197+ |
198+ 2 | 1 + ();
199+ | ^ no implementation for ` {integer} + ()`
200+ -Ztrack-diagnostics: created at compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs:638:39
201+ |
202+ = help: the trait ` Add<( ) > ` is not implemented for ` {integer}`
203+ = help: the following other types implement trait ` Add< Rhs> ` :
204+ < & ' a f32 as Add<f32>>
205+ <&' a f64 as Add< f64>>
206+ < & ' a i128 as Add<i128>>
207+ <&' a i16 as Add< i16>>
208+ < & ' a i32 as Add<i32>>
209+ <&' a i64 as Add< i64>>
210+ < & ' a i8 as Add<i8>>
211+ <&' a isize as Add< isize>>
212+ and 48 others
213+
214+ For more information about this error, try ` rustc --explain E0277` .
215+ ` ` `
216+
217+ This is similar but different to ` -Z treat-err-as-bug` :
218+ - it will print the locations for all errors emitted
219+ - it does not require a compiler built with debug symbols
220+ - you don' t have to read through a big stack trace.
221+
188222## Getting logging output
189223
190224The compiler uses the [`tracing`] crate for logging.
Original file line number Diff line number Diff line change @@ -269,7 +269,7 @@ book][rustc-lint-levels] and the [reference][reference-diagnostics].
269269
270270### Finding the source of errors
271271
272- There are two main ways to find where a given error is emitted:
272+ There are three main ways to find where a given error is emitted:
273273
274274- ` grep ` for either a sub-part of the error message/label or error code. This
275275 usually works well and is straightforward, but there are some cases where
@@ -287,6 +287,8 @@ There are two main ways to find where a given error is emitted:
287287 - The _ construction_ of the error is far away from where it is _ emitted_ ,
288288 a problem similar to the one we faced with the ` grep ` approach.
289289 In some cases, we buffer multiple errors in order to emit them in order.
290+ - Invoking ` rustc ` with the nightly-only flag ` -Z track-diagnostics ` will print error creation
291+ locations alongside the error.
290292
291293The regular development practices apply: judicious use of ` debug!() ` statements
292294and use of a debugger to trigger break points in order to figure out in what
You can’t perform that action at this time.
0 commit comments