3 个版本 (重大更改)

0.3.0 2020 年 12 月 15 日
0.2.0 2017 年 12 月 21 日
0.1.0 2017 年 8 月 9 日

#445 in 调试

Apache-2.0/MIT

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许可证定义提交的任何有意包含在作品中的贡献,将按上述方式双重许可,没有任何附加条款或条件。

此软件链接到多个库,这些库有自己的许可证。特别是,它与panopticon库链接,该库的许可证为GPL版本3。

依赖项

~49MB
~1M SLoC