As a call to the tracepoint. It will only be activated when requested by
lttng(1) through lttng-sessiond(8).
+Even though LTTng-UST supports tracepoint() call site duplicates having
+the same provider and event name, it is recommended to use a
+provider event name pair only once within the source code to help
+mapping events back to their call sites when analyzing the trace.
.fi
.SH "BUILDING/LINKING THE TRACEPOINT PROVIDER"
directly or through a static library (.a):
- Into exactly one object of your application: define
"TRACEPOINT_DEFINE" and include the tracepoint provider.
- - Use "-I." for the compilation unit containing the tracepoint
+ - Use "\-I." for the compilation unit containing the tracepoint
provider include (e.g. tp.c).
- - Link application with "-ldl".
+ - Link application with "\-ldl".
- If building the provider directly into the application,
- link the application with "-llttng-ust".
+ link the application with "\-llttng-ust".
- If building a static library for the provider, link the static
- library with "-lllttng-ust".
+ library with "\-llttng-ust".
- Include the tracepoint provider header into all C files using
the provider.
- Example:
- tests/hello/ hello.c tp.c ust_tests_hello.h Makefile.example
+ - tests/hello/ hello.c tp.c ust_tests_hello.h Makefile.example
2) Compile the Tracepoint Provider separately from the application,
using dynamic linking:
provider header.
- Include the tracepoint provider header into all instrumented C
files that use the provider.
- - Compile the tracepoint provider with "-I.".
- - Link the tracepoint provider with "-llttng-ust".
- - Link application with "-ldl".
+ - Compile the tracepoint provider with "\-I.".
+ - Link the tracepoint provider with "\-llttng-ust".
+ - Link application with "\-ldl".
- Set a LD_PRELOAD environment to preload the tracepoint provider
shared object before starting the application when tracing is
- needed.
+ needed. Another way is to dlopen the tracepoint probe when needed
+ by the application.
- Example:
- tests/demo/ demo.c tp*.c ust_tests_demo*.h demo-trace
- - Note about dlopen() usage: due to locking side-effects due to the
- way libc lazily resolves Thread-Local Storage (TLS) symbols when a
- library is dlopen'd, linking the tracepoint probe or liblttng-ust
- with dlopen() is discouraged. They should be linked with the
- application using "-llibname" or loaded with LD_PRELOAD.
+ - Note about dlclose() usage: it is not safe to use dlclose on a
+ provider shared object that is being actively used for tracing due
+ to a lack of reference counting from lttng-ust to the used shared
+ object.
- Enable instrumentation and control tracing with the "lttng" command
from lttng-tools. See lttng-tools doc/quickstart.txt.
+ - Note for C++ support: although an application instrumented with
+ tracepoints can be compiled with g++, tracepoint probes should be
+ compiled with gcc (only tested with gcc so far).
.fi
+.SH "USING LTTNG UST WITH DAEMONS"
+
+.nf
+Some extra care is needed when using liblttng-ust with daemon
+applications that call fork(), clone(), or BSD rfork() without a
+following exec() family system call. The library "liblttng-ust-fork.so"
+needs to be preloaded for the application (launch with e.g.
+LD_PRELOAD=liblttng-ust-fork.so appname).
+
+.fi
+
+.SH "CONTEXT"
+
+.PP
+Context information can be prepended by the tracer before each, or some,
+events. The following context information is supported by LTTng-UST:
+.PP
+
+.PP
+.IP "vtid"
+Virtual thread ID: thread ID as seen from the point of view of the
+process namespace.
+.PP
+
+.PP
+.IP "vpid"
+Virtual process ID: process ID as seen from the point of view of the
+process namespace.
+.PP
+
+.PP
+.IP "procname"
+Thread name, as set by exec() or prctl(). It is recommended that
+programs set their thread name with prctl() before hitting the first
+tracepoint for that thread.
+.PP
+
+.PP
+.IP "pthread_id"
+Pthread identifier. Can be used on architectures where pthread_t maps
+nicely to an unsigned long type.
+.PP
+
.SH "ENVIRONMENT VARIABLES"
.PP
"registration done" command before proceeding to execute the main
program. The default is 3000ms (3 seconds). The timeout value is
specified in milliseconds. The value 0 means "don't wait". The value
--1 means "wait forever". Setting this environment variable to 0 is
+\-1 means "wait forever". Setting this environment variable to 0 is
recommended for applications with time constraints on the process
startup time.
.PP