b3-strace-parser
Version:
strace to json parser
59 lines (35 loc) • 2.42 kB
Markdown
# B3 [](https://circleci.com/gh/dannykopping/b3/tree/master)
## Purpose
This project's goal is to parse the famously impenetrable `strace` output into JSON.
## Demo
[](https://asciinema.org/a/226608)
## Installation
Using **npm**: `npm i -g b3-strace-parser`
or download the [latest release](https://github.com/dannykopping/b3/releases)
## Usage
```bash
strace -f -p 1234 |& b3
# The "|&" is a shortcut for "2>&1 |" from Bash 4.0 (pipe stdout AND stderr to next program)
```
`strace` outputs to `stderr`, which is why you need the redirection.
For extra tastiness, combine with [`jq`](https://stedolan.github.io/jq/)
```bash
strace -f -p 1234 |& b3 | jq '' -c
```
### Tests
Run `npm test` to execute the test suite.
To enable extra tracing for problem-solving, set `TRACE=true`
### Caveats, Limitations & Other Miscellany
- Speed-wise, the utility performs well (according to my biased and unscientific benchmarking). It can currently parse ~15-20k lines per second, and there's much room for optimisation I'm sure.
- The utility cannot handle [unfinished syscalls](http://www.man7.org/linux/man-pages/man1/strace.1.html#DESCRIPTION)
- The utility silently skips parsers, unless the `-s/--stop-on-fail` switch is enabled
- The utility uses the very excellent [peg.js](https://pegjs.org/) and you should too!
If you encounter any parsing errors, please create an issue and I will be happy to fix it! ...or better yet, be a good FOSS citizen and send an MR :)
### Um, why?
Well, that's up to you. I figured that this output is so information-dense that it has to be useful in a structured format.
I love this utility and use it all the time, and wanted to learn more about it.
...plus it was a fun, terrifying, frustrating and illuminating excursion into parsing grammars (but _oy vey what a schlep!_).
### Why not do this in C?
1. I don't know C well enough, and...
2. I invite you to examine the [glorious mess](https://github.com/strace/strace/search?q=tprintf&unscoped_q=tprintf) that is this nearly 30-year old edifice
3. Many people have [tried and failed/given up](https://www.mail-archive.com/search?l=strace-devel%40lists.sourceforge.net&q=json&submit.x=0&submit.y=0), and I'm neither smarter nor more persistent than them