Auto merge of #76588 - guswynn:debug_logging, r=jyn514,Mark-Simulacrum
Add a dedicated debug-logging option to config.toml `@Mark-Simulacrum` and I were talking in zulip and we found that turning on debug/trace logging in rustc is fairly confusing, as it effectively depends on debug-assertions and is not documented as such. `@Mark-Simulacrum` mentioned that we should probably have a separate option for logging anyways. this diff adds that, having the option follow debug-assertions (so everyone's existing config.toml should be fine) and if the option is false to test I ran ./x.py test <something> twice, once with `debug-logging = false` and once with `debug-logging = true` and made sure i only saw trace's when it was true
This commit is contained in:
commit
4e48010b95
5 changed files with 27 additions and 3 deletions
|
@ -19,3 +19,4 @@ features = ['unprefixed_malloc_on_supported_platforms']
|
||||||
[features]
|
[features]
|
||||||
jemalloc = ['jemalloc-sys']
|
jemalloc = ['jemalloc-sys']
|
||||||
llvm = ['rustc_driver/llvm']
|
llvm = ['rustc_driver/llvm']
|
||||||
|
max_level_info = ['rustc_driver/max_level_info']
|
||||||
|
|
|
@ -9,7 +9,7 @@ crate-type = ["dylib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
tracing = { version = "0.1.18", features = ["release_max_level_info"] }
|
tracing = { version = "0.1.18" }
|
||||||
tracing-subscriber = { version = "0.2.10", default-features = false, features = ["fmt", "env-filter", "smallvec", "parking_lot", "ansi"] }
|
tracing-subscriber = { version = "0.2.10", default-features = false, features = ["fmt", "env-filter", "smallvec", "parking_lot", "ansi"] }
|
||||||
rustc_middle = { path = "../rustc_middle" }
|
rustc_middle = { path = "../rustc_middle" }
|
||||||
rustc_ast_pretty = { path = "../rustc_ast_pretty" }
|
rustc_ast_pretty = { path = "../rustc_ast_pretty" }
|
||||||
|
@ -38,3 +38,4 @@ winapi = { version = "0.3", features = ["consoleapi", "debugapi", "processenv"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
llvm = ['rustc_interface/llvm']
|
llvm = ['rustc_interface/llvm']
|
||||||
|
max_level_info = ['tracing/max_level_info']
|
||||||
|
|
|
@ -337,13 +337,19 @@
|
||||||
# binary, otherwise they are omitted.
|
# binary, otherwise they are omitted.
|
||||||
#
|
#
|
||||||
# Defaults to rust.debug value
|
# Defaults to rust.debug value
|
||||||
#debug-assertions = false
|
#debug-assertions = debug
|
||||||
|
|
||||||
# Whether or not debug assertions are enabled for the standard library.
|
# Whether or not debug assertions are enabled for the standard library.
|
||||||
# Overrides the `debug-assertions` option, if defined.
|
# Overrides the `debug-assertions` option, if defined.
|
||||||
#
|
#
|
||||||
# Defaults to rust.debug-assertions value
|
# Defaults to rust.debug-assertions value
|
||||||
#debug-assertions-std = false
|
#debug-assertions-std = debug-assertions
|
||||||
|
|
||||||
|
# Whether or not to leave debug! and trace! calls in the rust binary.
|
||||||
|
# Overrides the `debug-assertions` option, if defined.
|
||||||
|
#
|
||||||
|
# Defaults to rust.debug-assertions value
|
||||||
|
#debug-logging = debug-assertions
|
||||||
|
|
||||||
# Debuginfo level for most of Rust code, corresponds to the `-C debuginfo=N` option of `rustc`.
|
# Debuginfo level for most of Rust code, corresponds to the `-C debuginfo=N` option of `rustc`.
|
||||||
# `0` - no debug info
|
# `0` - no debug info
|
||||||
|
|
|
@ -112,6 +112,7 @@ pub struct Config {
|
||||||
pub rust_codegen_units_std: Option<u32>,
|
pub rust_codegen_units_std: Option<u32>,
|
||||||
pub rust_debug_assertions: bool,
|
pub rust_debug_assertions: bool,
|
||||||
pub rust_debug_assertions_std: bool,
|
pub rust_debug_assertions_std: bool,
|
||||||
|
pub rust_debug_logging: bool,
|
||||||
pub rust_debuginfo_level_rustc: u32,
|
pub rust_debuginfo_level_rustc: u32,
|
||||||
pub rust_debuginfo_level_std: u32,
|
pub rust_debuginfo_level_std: u32,
|
||||||
pub rust_debuginfo_level_tools: u32,
|
pub rust_debuginfo_level_tools: u32,
|
||||||
|
@ -392,6 +393,7 @@ struct Rust {
|
||||||
codegen_units_std: Option<u32>,
|
codegen_units_std: Option<u32>,
|
||||||
debug_assertions: Option<bool>,
|
debug_assertions: Option<bool>,
|
||||||
debug_assertions_std: Option<bool>,
|
debug_assertions_std: Option<bool>,
|
||||||
|
debug_logging: Option<bool>,
|
||||||
debuginfo_level: Option<u32>,
|
debuginfo_level: Option<u32>,
|
||||||
debuginfo_level_rustc: Option<u32>,
|
debuginfo_level_rustc: Option<u32>,
|
||||||
debuginfo_level_std: Option<u32>,
|
debuginfo_level_std: Option<u32>,
|
||||||
|
@ -600,6 +602,7 @@ impl Config {
|
||||||
let mut debug = None;
|
let mut debug = None;
|
||||||
let mut debug_assertions = None;
|
let mut debug_assertions = None;
|
||||||
let mut debug_assertions_std = None;
|
let mut debug_assertions_std = None;
|
||||||
|
let mut debug_logging = None;
|
||||||
let mut debuginfo_level = None;
|
let mut debuginfo_level = None;
|
||||||
let mut debuginfo_level_rustc = None;
|
let mut debuginfo_level_rustc = None;
|
||||||
let mut debuginfo_level_std = None;
|
let mut debuginfo_level_std = None;
|
||||||
|
@ -680,6 +683,7 @@ impl Config {
|
||||||
debug = rust.debug;
|
debug = rust.debug;
|
||||||
debug_assertions = rust.debug_assertions;
|
debug_assertions = rust.debug_assertions;
|
||||||
debug_assertions_std = rust.debug_assertions_std;
|
debug_assertions_std = rust.debug_assertions_std;
|
||||||
|
debug_logging = rust.debug_logging;
|
||||||
debuginfo_level = rust.debuginfo_level;
|
debuginfo_level = rust.debuginfo_level;
|
||||||
debuginfo_level_rustc = rust.debuginfo_level_rustc;
|
debuginfo_level_rustc = rust.debuginfo_level_rustc;
|
||||||
debuginfo_level_std = rust.debuginfo_level_std;
|
debuginfo_level_std = rust.debuginfo_level_std;
|
||||||
|
@ -797,6 +801,8 @@ impl Config {
|
||||||
config.rust_debug_assertions_std =
|
config.rust_debug_assertions_std =
|
||||||
debug_assertions_std.unwrap_or(config.rust_debug_assertions);
|
debug_assertions_std.unwrap_or(config.rust_debug_assertions);
|
||||||
|
|
||||||
|
config.rust_debug_logging = debug_logging.unwrap_or(config.rust_debug_assertions);
|
||||||
|
|
||||||
let with_defaults = |debuginfo_level_specific: Option<u32>| {
|
let with_defaults = |debuginfo_level_specific: Option<u32>| {
|
||||||
debuginfo_level_specific.or(debuginfo_level).unwrap_or(if debug == Some(true) {
|
debuginfo_level_specific.or(debuginfo_level).unwrap_or(if debug == Some(true) {
|
||||||
1
|
1
|
||||||
|
|
|
@ -541,6 +541,16 @@ impl Build {
|
||||||
if self.config.llvm_enabled() {
|
if self.config.llvm_enabled() {
|
||||||
features.push_str(" llvm");
|
features.push_str(" llvm");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If debug logging is on, then we want the default for tracing:
|
||||||
|
// https://github.com/tokio-rs/tracing/blob/3dd5c03d907afdf2c39444a29931833335171554/tracing/src/level_filters.rs#L26
|
||||||
|
// which is everything (including debug/trace/etc.)
|
||||||
|
// if its unset, if debug_assertions is on, then debug_logging will also be on
|
||||||
|
// as well as tracing *ignoring* this feature when debug_assertions is on
|
||||||
|
if !self.config.rust_debug_logging {
|
||||||
|
features.push_str(" max_level_info");
|
||||||
|
}
|
||||||
|
|
||||||
features
|
features
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue