Crate dwprod [−] [src]
Find the DW_AT_producer
for all compilation units within a shared library or
executable.
What is DW_AT_producer
?
The DW_AT_producer
is an attribute within DWARF debug info that says what
compiler was used to create each compilation unit that ended up within a given
shared library or executable.
Usage
As a Library
First, add this to your Cargo.toml
:
[dependencies.dwprod]
version = "0.1.0"
# Do not build the command line `dwprod` executable.
default-features = false
Then, import the dwprod
crate and use it to iterate over DW_AT_producer
values:
extern crate dwprod; fn try_main() -> dwprod::Result<()> { let opts = dwprod::Options::new("path/to/some/executable"); opts.producers(|producers| { while let Some(producer) = producers.next()? { println!("Found DW_AT_producer = {}", producer); } Ok(()) })? } fn main() { if let Err(e) = try_main() { eprintln!("Uh oh! {}", e); ::std::process::exit(1); } }
The fallible-iterator
crate can
also be used to leverage iterator combinators like map
and filter
:
extern crate dwprod; extern crate fallible_iterator; use fallible_iterator::FallibleIterator; use std::path::Path; fn each_rustc_producer<F>( shared_lib_or_exe: &Path, mut callback: F ) -> dwprod::Result<()> where F: FnMut(String) { let opts = dwprod::Options::new(shared_lib_or_exe); opts.producers(|producers| { producers // Filter down to only the producers with "rustc" in their name. .filter(|p| p.contains("rustc")) // Then map the given callback over each producer. .map(&mut callback) // Finally, use `count` to force iteration. .count()?; Ok(()) })? }
As a Command Line Tool
First, install via cargo
:
$ cargo install dwprod
Then, run dwprod path/to/shared/library/or/executable
to get a dump of all of
the DW_AT_producer
values for each compilation unit within the given shared
library or executable.
Here is the result of running dwprod
on itself:
$ dwprod $(which dwprod)
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
clang LLVM (rustc version 1.22.0-nightly (088216fb9 2017-09-04))
GNU C 4.8.5 -m64 -mtune=generic -march=x86-64 -g3 -O3 -O2 -O2 -std=gnu11 -fvisibility=hidden -funroll-loops -ffunction-sections -fdata-sections -fPIC
GNU C 4.8.5 -m64 -mtune=generic -march=x86-64 -g3 -O3 -O2 -O2 -std=gnu11 -fvisibility=hidden -funroll-loops -ffunction-sections -fdata-sections -fPIC
GNU C 4.8.5 -m64 -mtune=generic -march=x86-64 -g3 -O3 -O2 -O2 -std=gnu11 -fvisibility=hidden -funroll-loops -ffunction-sections -fdata-sections -fPIC
GNU C 4.8.5 -m64 -mtune=generic -march=x86-64 -g3 -O3 -O2 -O2 -std=gnu11 -fvisibility=hidden -funroll-loops -ffunction-sections -fdata-sections -fPIC
<truncated>
For more details about the dwprod
command line tool, run dwprod --help
.
Structs
Options |
A builder for configuring |
Producers |
A |
Enums
Error |
Errors that |
Type Definitions
Result |
Either an |