Make printin the backtrace more convenient

This commit is contained in:
Aleksey Kladov 2021-01-14 14:55:13 +03:00
parent dd5b3cd6f0
commit 865e05b5b4
5 changed files with 29 additions and 26 deletions

4
Cargo.lock generated
View file

@ -1197,7 +1197,6 @@ name = "profile"
version = "0.0.0"
dependencies = [
"arena",
"backtrace",
"cfg-if 1.0.0",
"libc",
"once_cell",
@ -1566,6 +1565,9 @@ dependencies = [
[[package]]
name = "stdx"
version = "0.0.0"
dependencies = [
"backtrace",
]
[[package]]
name = "syn"

View file

@ -13,7 +13,6 @@ doctest = false
once_cell = "1.3.1"
cfg-if = "1"
libc = "0.2.73"
backtrace = { version = "0.3.44", optional = true }
arena = { path = "../arena", version = "0.0.0" }
@ -24,5 +23,4 @@ perf-event = "0.4"
cpu_profiler = []
# Uncomment to enable for the whole crate graph
# default = [ "backtrace" ]
# default = [ "cpu_profiler" ]

View file

@ -15,21 +15,6 @@ pub use crate::{
stop_watch::{StopWatch, StopWatchSpan},
};
/// Prints backtrace to stderr, useful for debugging.
#[cfg(feature = "backtrace")]
pub fn print_backtrace() {
let bt = backtrace::Backtrace::new();
eprintln!("{:?}", bt);
}
#[cfg(not(feature = "backtrace"))]
pub fn print_backtrace() {
eprintln!(
r#"enable the backtrace feature:
profile = {{ path = "../profile", features = [ "backtrace"] }}
"#
);
}
thread_local!(static IN_SCOPE: RefCell<bool> = RefCell::new(false));
/// Allows to check if the current code is withing some dynamic scope, can be

View file

@ -10,4 +10,9 @@ edition = "2018"
doctest = false
[dependencies]
backtrace = { version = "0.3.44", optional = true }
# Think twice before adding anything here
[features]
# Uncomment to enable for the whole crate graph
# default = [ "backtrace" ]

View file

@ -25,6 +25,27 @@ pub fn timeit(label: &'static str) -> impl Drop {
Guard { label, start: Instant::now() }
}
/// Prints backtrace to stderr, useful for debugging.
#[cfg(feature = "backtrace")]
pub fn print_backtrace() {
let bt = backtrace::Backtrace::new();
eprintln!("{:?}", bt);
}
#[cfg(not(feature = "backtrace"))]
pub fn print_backtrace() {
eprintln!(
r#"Enable the backtrace feature.
Uncomment `default = [ "backtrace" ]` in `crates/stdx/Cargo.toml`.
"#
);
}
pub fn to_lower_snake_case(s: &str) -> String {
to_snake_case(s, char::to_ascii_lowercase)
}
pub fn to_upper_snake_case(s: &str) -> String {
to_snake_case(s, char::to_ascii_uppercase)
}
fn to_snake_case<F: Fn(&char) -> char>(s: &str, change_case: F) -> String {
let mut buf = String::with_capacity(s.len());
let mut prev = false;
@ -43,14 +64,6 @@ fn to_snake_case<F: Fn(&char) -> char>(s: &str, change_case: F) -> String {
buf
}
pub fn to_lower_snake_case(s: &str) -> String {
to_snake_case(s, char::to_ascii_lowercase)
}
pub fn to_upper_snake_case(s: &str) -> String {
to_snake_case(s, char::to_ascii_uppercase)
}
pub fn replace(buf: &mut String, from: char, to: &str) {
if !buf.contains(from) {
return;