----- On Oct 7, 2019, at 12:42 PM, Yonghong Yan <yany...@gmail.com> wrote:
> 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. The example below is bogus. Each of your tp_one.h and tp_two.h should have its own provider name, not "hello_world" for both. You should _only_ have a single header implementation file per provider name within an application. In my previous email, I was only refering to a case where you would want to define+create probes within a compile unit, and use the tracepoints (call them) from various other compile units in the program. Thanks, Mathieu > 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 < [ > mailto:mathieu.desnoy...@efficios.com | mathieu.desnoy...@efficios.com ] > > wrote: >> ----- On Oct 7, 2019, at 9:59 AM, Yonghong Yan [ mailto:yany...@gmail.com | >> 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 | >> 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 >> > [ mailto:lttng-dev@lists.lttng.org | lttng-dev@lists.lttng.org ] >>> [ https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev | >> > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev ] >> -- >> Mathieu Desnoyers >> EfficiOS Inc. >> [ http://www.efficios.com/ | http://www.efficios.com ] > _______________________________________________ > 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