3 个版本
0.3.3 | 2023 年 8 月 4 日 |
---|---|
0.3.2 | 2023 年 7 月 27 日 |
0.3.1 | 2022 年 11 月 17 日 |
#321 in 调试
每月 21 次下载
用于 2 crate
285KB
7.5K SLoC
ddbug - 显示调试信息
ddbug
是一个实用工具,用于使用 DWARF 调试信息来探索代码生成方面的内容,特别是查看代码生成如何因源代码更改或编译器选项更改而发生变化。
功能
- 类型大小和布局
- 函数类型、大小、内联函数、函数调用和反汇编
- 显示两个文件之间的差异
- 纯文本或 HTTP/HTML 输出
- 选项以过滤/排序纯文本输出
这是 alpha 软件可能包含许多错误和不完整的功能。不过,它仍然可以提供一些有用的功能。欢迎提交错误报告和功能请求。
支持
- 带有 DWARF 的 ELF 文件
- 带有 DWARF 的 Mach-O 文件
安装
安装 Rust 后,运行
cargo install --git https://github.com/gimli-rs/ddbug
运行
找到包含调试信息的文件,然后运行
ddbug path-to-file
查看 ddbug --help
获取控制显示哪些信息的选项的详细信息。
通常您会在经过优化但仍包含调试信息的二进制文件上运行 ddbug
。对于 rust,您可以使用以下方式构建您的代码:
RUSTFLAGS=-g cargo build --release
差异模式
当提供 --diff
选项和两个文件路径时,ddbug
将显示两个二进制文件之间的差异。有一些命令行选项可以指定哪些差异被视为重要。通常,您至少会忽略地址(-
)。
示例输出
结构和联合
struct core::fmt::Formatter
size: 96
members:
0[16] width: union core::option::Option<usize>
16[16] precision: union core::option::Option<usize>
32[16] buf: struct core::fmt::&mut Write
48[16] curarg: struct core::slice::Iter<core::fmt::ArgumentV1>
64[16] args: struct &[core::fmt::ArgumentV1]
80[4] flags: u32
84[4] fill: char
88[1] align: enum core::fmt::rt::v1::Alignment
89[7] <padding>
枚举
请注意,这是一个 C 风格的枚举。Rust 枚举在调试信息中以联合和枚举的形式编码。
enum core::result::Result
size: 1
enumerators:
Ok(0)
Err(1)
函数
fn ddbug::main
linkage name: _ZN5ddbug4mainE
address: 0x601f0-0x629d9
size: 10218
inlined functions:
[30] log::__static_max_level
[59] log::max_log_level
calls:
0x40eee0 env_logger::init
0x48870 core::result::Result<(), log::SetLoggerError>::ok<(),log::SetLoggerError>
fn log::__static_max_level
linkage name: _ZN3log18__static_max_levelE
inline: yes
return type:
[8] enum log::LogLevelFilter
许可证
本软件根据以下任一许可证授权:
- Apache许可证,版本2.0(
LICENSE-APACHE
) - MIT许可证(
LICENSE-MIT
)
由您选择。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应如上所述双重许可,不附加任何额外条款或条件。
依赖项
~5.5MB
~104K SLoC