Skip to content

Latest commit

 

History

History
59 lines (35 loc) · 2.36 KB

README.md

File metadata and controls

59 lines (35 loc) · 2.36 KB

B3 CircleCI

Purpose

This project's goal is to parse the famously impenetrable strace output into JSON.

Demo

asciicast

Installation

Using npm: npm i -g b3-strace-parser

or download the latest release

Usage

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

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
  • The utility silently skips parsers, unless the -s/--stop-on-fail switch is enabled
  • The utility uses the very excellent peg.js 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 that is this nearly 30-year old edifice
  3. Many people have tried and failed/given up, and I'm neither smarter nor more persistent than them