31 个版本 (15 个重大更新)
0.22.0 | 2024年7月3日 |
---|---|
0.21.1 | 2024年3月1日 |
0.19.1 | 2023年11月2日 |
0.17.0 | 2023年5月17日 |
0.1.0 | 2017年12月21日 |
#72 在 解析器实现
10,294 每月下载次数
用于 11 个crate(8个直接使用)
765KB
15K SLoC
minidump
minidump 格式的基本解析。
如果您想对 minidump 进行更丰富的分析(如堆栈跟踪和符号化),请使用 minidump-processor。
用法
此库的主要 API 是 Minidump
结构体,可以通过调用 Minidump::read
或 Minidump::read_path
方法进行实例化。
成功解析 Minidump 结构体表示 minidump 具有最小有效头和流目录。单个流仅在请求时进行解析。
尽管您可以使用 Minidump::all_streams
等方法遍历 minidump 中的流,但这实际上仅对调试有用。相反,您应该使用 Minidump::get_stream
静态请求流。
根据您要执行的分析,您可能
- 将流缺失视为错误(使用
?
或unwrap
) - 根据流的可用性进行分支,以有条件地细化您的分析
- 使用流的
Default
实现以获取“空”实例(使用unwrap_or_default
)
use minidump::*;
fn main() -> Result<(), Error> {
// Read the minidump from a file
let mut dump = minidump::Minidump::read_path("../testdata/test.dmp")?;
// Statically request (and require) several streams we care about:
let system_info = dump.get_stream::<MinidumpSystemInfo>()?;
let exception = dump.get_stream::<MinidumpException>()?;
// Combine the contents of the streams to perform more refined analysis
let crash_reason = exception.get_crash_reason(system_info.os, system_info.cpu);
// Conditionally analyze a stream
if let Ok(threads) = dump.get_stream::<MinidumpThreadList>() {
// Use `Default` to try to make progress when a stream is missing.
// This is especially natural for MinidumpMemoryList because
// everything needs to handle memory lookups failing anyway.
let mem = dump.get_memory().unwrap_or_default();
for thread in &threads.threads {
let stack = thread.stack_memory(&mem);
// ...
}
}
Ok(())
}
依赖项
~6.5MB
~177K SLoC