3 个版本

0.3.3 2023 年 8 月 4 日
0.3.2 2023 年 7 月 27 日
0.3.1 2022 年 11 月 17 日

#321 in 调试

每月 21 次下载
用于 2 crate

Apache-2.0 OR MIT

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许可证定义,您有意提交以包含在作品中的任何贡献,应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~5.5MB
~104K SLoC