This crate provides macros and methods for bug wrangling. Specifically, I want all the advantages of crashing (bug
reports, ease of debugging, etc.) with none of the drawbacks (lost progress, pissed off gamers, etc). Rust's error
handling mechanisms (Try
, ?
, Result
s, etc.) are great, but leave something to be desired when it comes to actual
bugs. Similarly, Rust's panic!
, .unwrap()
, .expect()
, etc. are decent when it comes to giving context for bugs,
but less great for writing stable software. This crate will attempt to bridge the gap.
| Platform | Breakpoints | Debugger | CI | Stable | Beta | Nightly |
| --------- | ----------- | --------- | -- | ------ | ---- | ------- |
| Windows | |
|
|
|
| Android |
|
|
|
|
| Linux |
|
|
|
|
|
|
| (Release) | | | |
|
| FreeBSD |
|
|
|
| NetBSD |
|
|
|
| OS X |
|
|
|
|
| iOS |
|
|
|
|
| WASM |
|
|
|
|
Add to your cargo.toml:
toml
[dependencies]
bugsalot = "0.2"
Write your code (see examples and documentation for more code): ```rust use bugsalot::debugger;
fn main() { let _ = debugger::waituntilattached(None); // Wait for a debugger to be attached
loop {
let a : Option<i32> = Some(42);
let b : Result<i32, &'static str> = Err("Unavailable");
let a = expect!(a, "Unable to do something or other", return);
let b = expect!(b, "Unable to do something or other", break);
// Debugger will pause on the above line, continuing will break out of the loop
}
expect!(true, "Booleans work too");
} ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.