3 个版本 (重大更改)
0.3.0 | 2020 年 12 月 15 日 |
---|---|
0.2.0 | 2017 年 12 月 21 日 |
0.1.0 | 2017 年 8 月 9 日 |
#445 in 调试
475KB
13K SLoC
包含 (ELF 可执行文件/库, 17KB) tests/bin/diff2, (ELF 可执行文件/库, 17KB) tests/bin/diff1
ddbug - 显示调试信息
ddbug
是一个工具,用于使用 DWARF 调试信息来探索代码生成的各个方面,特别是查看代码生成如何因源代码更改或编译器选项更改等因素而发生变化。
功能
- 类型大小和布局
- 函数大小、内联函数和函数调用
- 显示两个文件之间的差异
- 纯文本或 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
版权
版权所有 2016-2018 ddbug 开发者
本软件根据以下任一许可进行许可:
- Apache许可证,版本2.0(
LICENSE-APACHE
或 http://www.apache.org/licenses/LICENSE-2.0) - MIT许可证(
LICENSE-MIT
或 http://opensource.org/licenses/MIT)
由您自行选择。
除非您明确声明,否则您根据Apache-2.0许可证定义提交的任何有意包含在作品中的贡献,将按上述方式双重许可,没有任何附加条款或条件。
此软件链接到多个库,这些库有自己的许可证。特别是,它与panopticon库链接,该库的许可证为GPL版本3。
依赖项
~49MB
~1M SLoC