1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Declared so a parent directory cannot absorb this into its own workspace.
[]
[]
= "panicgraph"
= "0.2.1"
= "2024"
= ["Khashayar Fereidani <info@fereidani.com>"]
= "MIT OR Apache-2.0"
# No `rust-version`. It states a minimum, and the driver links compiler
# internals that have no stable interface, so a newer toolchain breaks the
# build as readily as an older one. The requirement is the nightly the tool
# was built with, which rust-toolchain.toml selects.
= "Reports which functions can panic, why, and through what call path."
= "https://github.com/fereidani/panicgraph"
= [
"development-tools",
"development-tools::debugging",
"development-tools::testing",
"command-line-utilities",
"visualization",
]
= ["panic", "static-analysis", "mir", "no-panic", "flamegraph"]
[]
= "panicgraph"
= "src/lib.rs"
[[]]
= "panicgraph"
= "src/main.rs"
# The driver ships as a second binary of the same package so that a single
# `cargo install --path .` puts both on PATH next to each other, which is
# where the front end looks for it. A separate package would install only
# when named explicitly.
[[]]
= "panicgraph-driver"
= "src/driver/main.rs"
[]
# The report and the check are the whole tool for a build that only needs a
# verdict. The interactive view and the drawing are for a person looking at
# the result, so both can be left out, which drops the compression dependency
# and the vendored scripts the view is built on.
= ["serve", "svg"]
= ["dep:flate2"]
= []
[]
= "1"
= { = "4", = ["derive"] }
# Pure Rust backend, so the tool builds anywhere without a system zlib.
= { = "1", = false, = [
"rust_backend",
], = true }
# Serde support is what lets the palette file deserialize into its maps.
= { = "0.17", = ["serde"] }
= "1"
# Official demangler from the rust-lang organization, used to recognize
# panic entry points in compiled artifacts by their readable names.
= "0.1"
= { = "1", = ["derive"] }
= "1"
[]
= 0
= "fat"
= 1
= false
= true
# `panic = "abort"` is deliberately absent. The driver links the compiler's
# own libraries, which are built with the unwinding runtime, and mixing the
# two is rejected outright: "the linked panic runtime `panic_unwind` is not
# compiled with this crate's panic strategy `abort`". Cargo does not allow
# the setting per package either, so it would have to apply to the driver as
# well. Unwinding is also what lets the driver turn a compiler crash into a
# clean exit code rather than taking the whole build down with it.
[]
= { = "warn", = -1 }
= { = "warn", = -1 }