about summary refs log tree commit diff
path: root/src/doc/rustc-dev-guide
diff options
context:
space:
mode:
authorking6cong <king6cong@gmail.com>2019-01-18 00:06:00 +0800
committerWho? Me?! <mark-i-m@users.noreply.github.com>2019-01-18 13:25:19 -0600
commitd25c158768628cda39607e7c49c00675d8b4657e (patch)
treeaeb0a7d4a67c7e00f20e177c8118acaab808b360 /src/doc/rustc-dev-guide
parent56c8f82ba3c51e3dea4a1422d06123b3f8eaca9e (diff)
downloadrust-d25c158768628cda39607e7c49c00675d8b4657e.tar.gz
rust-d25c158768628cda39607e7c49c00675d8b4657e.zip
Update the doc related to complier logging
Diffstat (limited to 'src/doc/rustc-dev-guide')
-rw-r--r--src/doc/rustc-dev-guide/src/compiler-debugging.md59
1 files changed, 15 insertions, 44 deletions
diff --git a/src/doc/rustc-dev-guide/src/compiler-debugging.md b/src/doc/rustc-dev-guide/src/compiler-debugging.md
index aca7f7424b8..19c939d6db2 100644
--- a/src/doc/rustc-dev-guide/src/compiler-debugging.md
+++ b/src/doc/rustc-dev-guide/src/compiler-debugging.md
@@ -1,7 +1,3 @@
-**Note: This is copied from the
-[rust-forge](https://github.com/rust-lang-nursery/rust-forge). If anything needs
- updating, please open an issue or make a PR on the github repo.**
-
 # Debugging the compiler
 [debugging]: #debugging
 
@@ -134,6 +130,11 @@ $ # Cool, now I have a backtrace for the error
 ## Getting logging output
 [getting-logging-output]: #getting-logging-output
 
+These crates are used in compiler for logging:
+
+* [log]
+* [env-logger]: check the link to see the full `RUST_LOG` syntax
+
 The compiler has a lot of `debug!` calls, which print out logging information
 at many points. These are very useful to at least narrow down the location of
 a bug if not to find it entirely, or just to orient yourself as to why the
@@ -141,10 +142,8 @@ compiler is doing a particular thing.
 
 To see the logs, you need to set the `RUST_LOG` environment variable to
 your log filter, e.g. to get the logs for a specific module, you can run the
-compiler as `RUST_LOG=module::path rustc my-file.rs`. The Rust logs are
-powered by [env-logger], and you can look at the docs linked there to see
-the full `RUST_LOG` syntax. All `debug!` output will then appear in
-standard error.
+compiler as `RUST_LOG=module::path rustc my-file.rs`. All `debug!` output will
+then appear in standard error.
 
 Note that unless you use a very strict filter, the logger will emit a *lot*
 of output - so it's typically a good idea to pipe standard error to a file
@@ -176,8 +175,10 @@ $ RUST_LOG=debug rustc +local my-file.rs 2>all-log
 $ RUST_LOG=rustc_trans=info rustc +local my-file.rs
 ```
 
-While calls to `info!` are included in every build of the compiler,
-calls to `debug!` are only included in the program if the
+### How to keep or remove `debug!` and `trace!` calls from the resulting binary
+
+While calls to `error!`, `warn!` and `info!` are included in every build of the compiler,
+calls to `debug!` and `trace!` are only included in the program if
 `debug-assertions=yes` is turned on in config.toml (it is
 turned off by default), so if you don't see `DEBUG` logs, especially
 if you run the compiler with `RUST_LOG=rustc rustc some.rs` and only see
@@ -200,48 +201,18 @@ However, there are still a few concerns that you might care about:
 
 ### Expensive operations in logs
 
-A note of caution: the expressions *within* the `debug!` call are run
-whenever RUST_LOG is set, even if the filter would exclude the log. This means
-that if in the module `rustc::foo` you have a statement
+If in the module `rustc::foo` you have a statement
 
 ```Rust
 debug!("{:?}", random_operation(tcx));
 ```
 
 Then if someone runs a debug `rustc` with `RUST_LOG=rustc::bar`, then
-`random_operation()` will still run - even while it's output will never be
-needed!
+`random_operation()` will run.
 
 This means that you should not put anything too expensive or likely
 to crash there - that would annoy anyone who wants to use logging for their own
-module. Note that if `RUST_LOG` is unset (the default), then the code will not
-run - this means that if your logging code panics, then no-one will know it
-until someone tries to use logging to find *another* bug.
-
-If you *need* to do an expensive operation in a log, be aware that while log
-expressions are *evaluated* even if logging is not enabled in your module,
-they are not *formatted* unless it *is*. This means you can put your
-expensive/crashy operations inside an `fmt::Debug` impl, and they will not be
-run unless your log is enabled:
-
-```Rust
-use std::fmt;
-
-struct ExpensiveOperationContainer<'a, 'gcx, 'tcx>
-    where 'tcx: 'gcx, 'a: 'tcx
-{
-    tcx: TyCtxt<'a, 'gcx, 'tcx>
-}
-
-impl<'a, 'gcx, 'tcx> fmt::Debug for ExpensiveOperationContainer<'a, 'gcx, 'tcx> {
-    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-        let value = random_operation(tcx);
-        fmt::Debug::fmt(&value, fmt)
-    }
-}
-
-debug!("{:?}", ExpensiveOperationContainer { tcx });
-```
+module. No-one will know it until someone tries to use logging to find *another* bug.
 
 ## Formatting Graphviz output (.dot files)
 [formatting-graphviz-output]: #formatting-graphviz-output
@@ -382,7 +353,7 @@ create a minimal working example with Godbolt. Go to
 5. Once you have a godbolt link demonstrating the issue, it is pretty easy to
    fill in an LLVM bug.
 
-
+[log]: https://docs.rs/log/0.4.6/log/index.html
 [env-logger]: https://docs.rs/env_logger/0.4.3/env_logger/
 
 ## Narrowing (Bisecting) Regressions