Structured output?

Philippe Ombredanne pombredanne at nexb.com
Sun Feb 9 22:14:28 UTC 2014


On Fri, Feb 7, 2014 at 1:36 AM, Dmitry V. Levin <ldv at altlinux.org> wrote:
> On Thu, Feb 06, 2014 at 03:41:54PM +0100, Philippe Ombredanne wrote:
[...]
>> As a first step I think the best would be to come with a few mock
>> samples of json output.  -- Philippe Ombredanne
>
> I wonder how printxval and printflags would look like.
> For example, what would be a json-like equivalent for this traditional output:
>
> $ printf '#include <sys/socket.h>\nint main(){return socket(AF_INET,-1,0xffff)<0;}' |gcc -Wall -xc -
> $ strace -esocket ./a.out
> socket(PF_INET, SOCK_CLOEXEC|SOCK_NONBLOCK|0xfff7f7ff, 0xffff /* IPPROTO_??? */) = -1 EINVAL (Invalid argument)
> +++ exited with 1 +++

We would need something of a record type, as a line can be a call
proper or a SIG* or +++  or (else?).
For this example say we have type c: syscall, type x: process exit.
Return would be a map.
Args could be a list of [value, message]. To cover more ground it may
need to be a map in the end.
Note that for now, I do not care yet about having a compact
representation, but rather expressive and easy to parse one.
We could use positional lists rather than maps for more compact output.

So this could look like this:

[
{"type": "c",
 "call": "socket",
 "return": {"success": false,
            "code": "-1",
            "errno": "EINVAL",
            "message": "Invalid argument"},
 "args": [ [ "PF_INET", "" ],
           [ "SOCK_CLOEXEC|SOCK_NONBLOCK|0xfff7f7ff", ""],
           [ "0xfff", "IPPROTO_???"]
         ]
},
{"type": "x",
 "return": {"success": false,
            "code": "1"}
}
]


-- 
Philippe Ombredanne




More information about the Strace-devel mailing list