Advanced and improved absolute paths decoding
eQuiNoX
equinox.71717171 at gmail.com
Fri Mar 7 02:38:52 UTC 2014
On Thu, Mar 6, 2014 at 8:01 PM, Philippe Ombredanne
<pombredanne at nexb.com> wrote:
> On Tue, Mar 4, 2014 at 1:59 PM, Zubin Mithra <zubin.mithra at gmail.com> wrote:
>> Hey Philippe,
>>
>>> Just curious, why would you use call_one? and arg1,arg2 v.s using lists?
>>
>> I was just wondering if information related to the call sequence might
>> be useful. In quite a few languages, JSON data directly maps to
>> dictionary representations(eg:- Python) -- but upon doing that we'd
>> lose information about the sequence in which the calls occurred once
>> we create a dictionary from the JSON. In such cases having explicit
>> information about the order might be useful.
>
> JSON is a spec so you should not care about how it is interpreted in a
> given language.
> JSON has arrays that are ordered lists and objects that are unordered
> name/value mappings.
> So when you need an ordered sequence, use an array, please do not make
> up a map name to track ordering.
> If you have name/values mapping and need ordering, wrap that in an array.
Good point, yes, I agree.
>
>
>>> FWIW the above would not be valid JSON.
>>> What about something like:
>>> [
>>> {"fnname": "open",
>>> "args": ["/usr/lib/locale/UTF-8/LC_CTYPE", "O_RDONLY|O_CLOEXEC"],
>>> "ret": "-1"
>>> }
>>> ]
>>
>> Cool stuff, thank you!
>>
>>>
>>> or possibly (not sure which form I like best) using a more compact
>>> entirely and positional list of lists:
>>> [
>>> "open",
>>> "-1",
>>> [
>>> "/usr/lib/locale/UTF-8/LC_CTYPE",
>>> "O_RDONLY|O_CLOEXEC"
>>> ]
>>> ]
>>>
>>>> Of course, this above example is oversimplified(And I'm not sure thats
>>>> the best way to manage quoting to be honest, I'll put in some more
>>>> thought).
>>
>> I think I like the first one better, I think it looks cleaner(open to
>> suggestions of course!).
>
> I do not know which one is better yet but a simpler array without
> made-up names when they do not exist feels much cleaner and less
> verbose to me, and does not affect the structure nor the readability.
> Being somewhat compact is not something nice to have but a feature
> when tracing IMHO both in terms of time and space.
Indeed, I hadn't considered that.
>
>>> I think that in the case of a JSON output, double quoting paths would
>>> not be desirable and paths should be returned a simple JSON string
>>
>> Cool stuff, makes sense.
>>
>>>
>>>> In cases where a struct is passed as an argument, as in the case of a
>>>> bind call we have,
>>>> bind(3, {sa_family=AF_INET, sin_port=htons(7171),
>>>> sin_addr=inet_addr("0.0.0.0")}, 16) = 0
>>>>
>>>> We could have "arg2" set to "{sa_family=AF_INET, sin_port=htons(7171),
>>>> sin_addr=inet_addr("0.0.0.0")}" but I feel it defeats the purpose as
>>>> parsing output itself would be more painful. Perhaps something like
>>>> the following would be nice.
>>>>
>>>> {
>>>> "call_thirteen" : {
>>>> "fnname" = "bind",
>>>> "arg1" = "3",
>>>> "arg2" : {
>>>> "sa_family" : "AF_INET",
>>>> "sin_port" : "htons(7171)",
>>>> "sin_addr" : "inet_addr("0.0.0.0")"
>>>> },
>>>> "ret" = "-1"
>>>> }
>>>> }
>>>
>>> This makes sense but same comment as above: why not using a combo of
>>> objects and arrays (using JSON speak)?
>>> and why not structuring everything that can be?
>>> ie something along these lines?
>>> [
>>> {
>>> "fnname": "bind",
>>> "args": [
>>> "3",
>>> {
>>> "sa_family": "AF_INET",
>>> "sin_port": {
>>> "htons": "7171"
>>> },
>>> "sin_addr": {
>>> "inet_addr": "0.0.0.0"
>>> }
>>> }
>>> ],
>>> "ret": "-1"
>>> }
>>> ]
>>
>> If the call information being added makes sense, it would look
>> something as follows, I believe :-
>>
>> '{"call_one": [{"fnname": "bind", "ret": "-1", "args": ["3",
>> {"sin_port": {"htons": "7171"}, "sin_addr": {"inet_addr": "0.0.0.0"},
>> "sa_family": "AF_INET"}]}]}'
>
> As I said above adding call_one does not make sense and is rather
> ugly. Use arrays/list not maps/objects for sequences.
> The top level construct should therefore be a list [] not a map.
> Where you need a sequence, use a list. And use a map only when needed.
> Do not make up names.
Perfect, sounds good to me! I'll modify my GSoC proposal to reflect
these changes, thank you!
Thanks!
zm
More information about the Strace-devel
mailing list