[lttng-dev] sdt.h tracepoints with unicode data and/or structs

Philippe Proulx eeppeliteloop at gmail.com
Tue Oct 4 15:50:06 UTC 2016


>> This sounds excellent. Can you tell me how? Could you maybe add an example to
>> lttng-ust. Also note how http://lttng.org/man/3/lttng-ust/v2.7 says:
>>
>>       if (tracepoint_enabled(ust_tests_hello, tptest)) {
>>               /* prepare arguments */
>>               do_tracepoint(ust_tests_hello, tptest, i, netint, values,
>>                       text, strlen(text), dbl, flt);
>>       }
>>
>> If I understood you correctly, then I could do something like
>>
>>       if (tracepoint_enabled(ust_tests_hello, tptest)) {
>>               /* don't prepare arguments */
>>               do_tracepoint(ust_tests_hello, my_complex_data);
>>       }
>>
>> And then have the "prepare" code somewhere in my TRACEPOINT_EVENT?
>>
>
> Yes. Both approaches can be used.
>
> Note that the second approach you refer to is the same as using a
> plain tracepoint() macro and doing the preparation within
> the TRACEPOINT_EVENT() macro.

Here's an example (C++):

    #define _my_enum_evaluation(_enum, _field, _member)                     \
      ctf_enum(my_provider, _enum, int, _field,                             \
               (_member).is_bound() ?                                       \
                 ((SomeApi::_enum::enum_type) (_member) <
SomeApi::_enum::UNKNOWN_VALUE ? \
                   (int) ((SomeApi::_enum::enum_type) (_member)) : INT_MAX  \
                 ) : INT_MAX)

    TRACEPOINT_ENUM(
      my_provider,
      my_enum,
      TP_ENUM_VALUES(
        ctf_enum_value("unknown", 0)
        ctf_enum_value("apple", 1)
        ctf_enum_value("banana", 2)
        ctf_enum_value("orange", 3)
        ctf_enum_value("strawberry", 4)
      )
    )

    TRACEPOINT_EVENT(
      my_provider,
      my_tracepoint,
      TP_ARGS(
        int something,
        const SomeApi::SomeObject&, object
      ),
      TP_FIELDS(
      ctf_integer(int, int_field, something)
        _my_enum_evaluation(my_enum, enum_field, object.someMember())
      )
    )

You can call functions in there, evaluate conditions using the ternary operator,
etc.

Phil

>
> The preparation within TRACEPOINT_EVENT() can currently only be
> done as expression evaluation in the TP_FIELDS. LTTng-modules has
> more flexibility in that respect, but not lttng-ust yet.
>
> A patch contributing such example to lttng-ust would be welcome :)
>
> Thanks,
>
> Mathieu
>
>
>> Thanks
>> --
>> Milian Wolff | milian.wolff at kdab.com | Software Engineer
>> KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
>> Tel: +49-30-521325470
>> KDAB - The Qt Experts
>
> --
> Mathieu Desnoyers
> EfficiOS Inc.
> http://www.efficios.com


More information about the lttng-dev mailing list