From mboxrd@z Thu Jan 1 00:00:00 1970 From: eeppeliteloop@gmail.com (Philippe Proulx) Date: Tue, 4 Oct 2016 11:50:06 -0400 Subject: [lttng-dev] sdt.h tracepoints with unicode data and/or structs In-Reply-To: <1527185266.45326.1475595408856.JavaMail.zimbra@efficios.com> References: <133954640.uMaX5Hy6f7@agathebauer> <1494937800.28038.1474478555753.JavaMail.zimbra@efficios.com> <12621392.supdKG9qFk@milian-kdab2> <1527185266.45326.1475595408856.JavaMail.zimbra@efficios.com> Message-ID: >> 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