From mboxrd@z Thu Jan 1 00:00:00 1970 From: milian.wolff@kdab.com (Milian Wolff) Date: Wed, 05 Oct 2016 10:05:40 +0200 Subject: [lttng-dev] sdt.h tracepoints with unicode data and/or structs In-Reply-To: References: <133954640.uMaX5Hy6f7@agathebauer> <1527185266.45326.1475595408856.JavaMail.zimbra@efficios.com> Message-ID: <3206897.LZESX5kvee@milian-kdab2> On Tuesday, October 4, 2016 11:50:06 AM CEST Philippe Proulx wrote: > >> 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. Thank you, that is exactly the example that I was looking for. Cheers -- 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 -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 5903 bytes Desc: not available URL: