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.