I finally finished up a commandline utility I had been working on and made it useful enough to release. tracetree is a tool for running a process and capturing the execution time of it and all child processes that get launched underneath it. There are a few simple demos in the README, and I wrote a crummy little webapp to visualize the output in a nicer way which has a button to load some sample data (a trace of a cargo build of one of my other Rust projects). I published it on crates.io so you can
cargo install tracetree, and there’s also a Linux binary available via GitHub releases.
This tool only works on Linux right now, although I’m pretty confident I know what I need to do to make it work on Mac, and I think I know how to make it work on Windows. My primary use case here is high-level profiling of build systems that launch lots of subprocesses–it can be hard to figure out where time is being spent in these situations, and trying to parse this data out of a tool like
strace is a pain.
Since this is a Rust forum I will also say that I really enjoy writing system tools in Rust. It makes doing all the low-level things I’m used to doing in C++ straightforward, but also makes doing higher-level things easy, like pulling in
clap to have nice argument parsing, or pulling in
serde-json to easily get JSON output.