Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gimli-rs/gimli

A library for reading and writing the DWARF debugging format
https://github.com/gimli-rs/gimli

cross-platform dwarf rust

Last synced: about 1 month ago
JSON representation

A library for reading and writing the DWARF debugging format

Awesome Lists containing this project

README

        

# `gimli`

[![](https://img.shields.io/crates/v/gimli.svg) ![](https://img.shields.io/crates/d/gimli.svg)](https://crates.io/crates/gimli)
[![](https://docs.rs/gimli/badge.svg)](https://docs.rs/gimli/)
[![Build Status](https://github.com/gimli-rs/gimli/workflows/Rust/badge.svg)](https://github.com/gimli-rs/gimli/actions)
[![Coverage Status](https://coveralls.io/repos/github/gimli-rs/gimli/badge.svg?branch=master)](https://coveralls.io/github/gimli-rs/gimli?branch=master)

`gimli` is a library for reading and writing the
[DWARF debugging format](https://dwarfstd.org/).

* **Zero copy:** everything is just a reference to the original input buffer. No
copies of the input data get made.

* **Lazy:** you can iterate compilation units without parsing their
contents. Parse only as many debugging information entry (DIE) trees as you
iterate over. `gimli` also uses `DW_AT_sibling` references to avoid parsing a
DIE's children to find its next sibling, when possible.

* **Cross-platform:** `gimli` makes no assumptions about what kind of object
file you're working with. The flipside to that is that it's up to you to
provide an ELF loader on Linux or Mach-O loader on macOS.

* Unsure which object file parser to use? Try the cross-platform
[`object`](https://github.com/gimli-rs/object) crate. See the
[`gimli-examples`](./crates/examples/src/bin) crate for usage with `gimli`.

## Install

Add this to your `Cargo.toml`:

```toml
[dependencies]
gimli = "0.31.1"
```

The minimum supported Rust version is:

* 1.60.0 for the `read` feature and its dependencies.
* 1.65.0 for other features.

## Documentation

* [Documentation on docs.rs](https://docs.rs/gimli/)

* Example programs:

* [A simple `.debug_info` parser](./crates/examples/src/bin/simple.rs)

* [A simple `.debug_line` parser](./crates/examples/src/bin/simple_line.rs)

* [A `dwarfdump` clone](./crates/examples/src/bin/dwarfdump.rs)

* [An `addr2line` clone](https://github.com/gimli-rs/addr2line)

* [`ddbug`](https://github.com/gimli-rs/ddbug), a utility giving insight into
code generation by making debugging information readable.

* [`dwprod`](https://github.com/fitzgen/dwprod), a tiny utility to list the
compilers used to create each compilation unit within a shared library or
executable (via `DW_AT_producer`).

* [`dwarf-validate`](./crates/examples/src/bin/dwarf-validate.rs), a program to validate the
integrity of some DWARF and its references between sections and compilation
units.

## License

Licensed under either of

* Apache License, Version 2.0 ([`LICENSE-APACHE`](./LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([`LICENSE-MIT`](./LICENSE-MIT) or https://opensource.org/licenses/MIT)

at your option.

## Contribution

See [CONTRIBUTING.md](./CONTRIBUTING.md) for hacking.

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.