Thank you. I got most. To confirm, I have two header files, each defines its own tracepoint, they are from the same provider. The source files that use the header files have its own #define TRACEPOINT_CREATE_PROBES and #define TRACEPOINT_DEFINE. This won't work since two files have those defines. But if I remove #define TRACEPOINT_CREATE_PROBES#define TRACEPOINT_DEFINE from one of the two .c file, it should work.
tp_one.h file: #undef TRACEPOINT_PROVIDER#define TRACEPOINT_PROVIDER hello_world #undef TRACEPOINT_INCLUDE#define TRACEPOINT_INCLUDE "./tp_one.h" #if !defined(_TP_ONE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)#define _TP_ONE_H #include <lttng/tracepoint.h> TRACEPOINT_EVENT( hello_world, my_first_tracepoint, TP_ARGS( int, my_integer_arg, char*, my_string_arg ), TP_FIELDS( ctf_string(my_string_field, my_string_arg) ctf_integer(int, my_integer_field, my_integer_arg) )) #endif /* _TP_ONE_H */ #include <lttng/tracepoint-event.h> tp_one.c #define TRACEPOINT_CREATE_PROBES#define TRACEPOINT_DEFINE #include "tp_one.h" tp_two.h file: #undef TRACEPOINT_PROVIDER#define TRACEPOINT_PROVIDER hello_world #undef TRACEPOINT_INCLUDE#define TRACEPOINT_INCLUDE "./tp_two.h" #if !defined(_TP_TWO_H) || defined(TRACEPOINT_HEADER_MULTI_READ)#define _TP_TWO_H #include <lttng/tracepoint.h> TRACEPOINT_EVENT( hello_world, my_second_tracepoint, TP_ARGS( int, my_integer_arg, char*, my_string_arg ), TP_FIELDS( ctf_string(my_string_field, my_string_arg) ctf_integer(int, my_integer_field, my_integer_arg) )) #endif /* _TP_TWO_H */ #include <lttng/tracepoint-event.h> tp_two.c #define TRACEPOINT_CREATE_PROBES#define TRACEPOINT_DEFINE #include "tp_two.h" hello.c use the two tracepoints defined in the two files. To compile (compile file one by one). gcc -o hello tp-one.c tp-two.c hello.c -llttng-ust -ldl On Mon, Oct 7, 2019 at 12:22 PM Mathieu Desnoyers < mathieu.desnoy...@efficios.com> wrote: > > > ----- On Oct 7, 2019, at 9:59 AM, Yonghong Yan yany...@gmail.com wrote: > > > For lttng-ust, can I put the tracepoint definition in two files, but > they use > > the same provider. > > Based on the terminology here: > https://lttng.org/docs/v2.10/#doc-tracing-your-own-user-application > > You need to have at most one instance of your tracepoint provider where > the header is included with TRACEPOINT_CREATE_PROBES, and exactly one > instance where TRACEPOINT_DEFINE is defined. (both can end up being within > the same object if you wish). > > Then you can include your tracepoint provider header file at will across > other compile units in your program. Just make sure none of > TRACEPOINT_CREATE_PROBES nor TRACEPOINT_DEFINE are defined in those other > compile units. You can therefore call tracepoints from a given probe from > various compile units in your program. > > Hoping this helps clarifying things, > > Mathieu > > > Thank you. > > Yonghong > > > _______________________________________________ > > lttng-dev mailing list > > lttng-dev@lists.lttng.org > > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev > -- > Mathieu Desnoyers > EfficiOS Inc. > http://www.efficios.com >
_______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev