История изменений
Исправление Virtuos86, (текущая версия) :
Уважаемые растоводы, как вы дебагируете свой код?
Не «дебагируете», а «дебажите». Если, конечно, не подразумевалась пантера Багира из «Маугли» :).
Дебажу println'ами. Или велосипедными логгерами:
use std::fs::OpenOptions;
const DEBUG: bool = true;
pub fn log<S: Into<String>>(message: S) -> Result<()> {
if !DEBUG { return Ok(()) };
let mut message: String = message.into();
message.push_str("\n\n=====================================================\
===========================\n\n");
OpenOptions::new()
.append(true)
.create(true)
.open("log.txt")?
.write_all(message.as_bytes())?;
Ok(())
}
macro_rules! log {
($t:expr) => (log($t).unwrap())
}
fn main() {
log!("WARNING");
}
extern crate decorators;
use decorators::decorators;
pub fn logger<T: Debug>(message: &str, arg: T) -> T {
log(format!("{}: {:?}", message, arg )).unwrap();
arg
}
#[decorators(logger("`foo` return"))]
pub fn foo(arg: i32) -> f64 {
...
}
Исходная версия Virtuos86, :
Уважаемые растоводы, как вы дебагируете свой код?
Не «дебагируете», а «дебажите». Если, конечно, не подразумевалась пантера Багира из «Маугли» :).
Дебажу println'ами. Или велосипедными логгерами:
const DEBUG: bool = true;
pub fn log<S: Into<String>>(message: S) -> Result<()> {
if !DEBUG { return Ok(()) };
let mut message: String = message.into();
message.push_str("\n\n=====================================================\
===========================\n\n");
OpenOptions::new()
.append(true)
.create(true)
.open("log.txt")?
.write_all(message.as_bytes())?;
Ok(())
}
macro_rules! log {
($t:expr) => (log($t).unwrap())
}
fn main() {
log!("WARNING");
}
extern crate decorators;
use decorators::decorators;
pub fn logger<T: Debug>(message: &str, arg: T) -> T {
log(format!("{}: {:?}", message, arg )).unwrap();
arg
}
#[decorators(logger("`foo` return"))]
pub fn foo(arg: i32) -> f64 {
...
}