X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=doc%2Fman%2Flttng-ust.3;h=4d86bfe0268076f05e1bfffb6f913a6156bc7106;hb=0eb0dfe97f0a67912c71cb714b83adb569cabcb8;hp=26841d02e3f89ebf6ba9acdeac0b74867360c30f;hpb=cf949d071aeea0f97d3df0946de383a01dbcc393;p=lttng-ust.git diff --git a/doc/man/lttng-ust.3 b/doc/man/lttng-ust.3 index 26841d02..4d86bfe0 100644 --- a/doc/man/lttng-ust.3 +++ b/doc/man/lttng-ust.3 @@ -17,7 +17,73 @@ port of the low-overhead tracing capabilities of the LTTng kernel tracer to user-space. The library "liblttng-ust" enables tracing of applications and libraries. -.SH "USAGE" +.SH "USAGE WITH TRACEF" +.PP +The simplest way to add instrumentation to your code is by far the +tracef() API. To do it, in a nutshell: + +1) #include + +2) /* in your code, use like a printf */ + tracef("my message, this integer %d", 1234); + +3) Link your program against liblttng-ust.so. + +4) Enable UST events when tracing with the following sequence of commands + from lttng-tools: + + lttng create + lttng enable-event -u -a + lttng start + [... run your program ...] + lttng stop + lttng view + +That's it! + +If you want to have more flexibility and control on the event names, +payload typing, etc, you can continue reading on and use the tracepoints +below. "tracef()" is there for quick and dirty ad hoc instrumentation, +whereas tracepoint.h is meant for thorough instrumentation of a code +base to be integrated with an upstream project. +.PP + +.SH "USAGE WITH TRACELOG" +.PP +If you want to migrate existing logging (info, errors, ...) +to LTTng UST, you can use the tracelog() interface. +To do it, in a nutshell: + +1) #include + +2) /* in your code, use like a printf, with extra loglevel info. */ + tracelog(TRACE_INFO, "Message with integer %d", 1234); + +3) Link your program against liblttng-ust.so. + +4) Enable UST events when tracing with the following sequence of commands + from lttng-tools: + + lttng create + lttng enable-event -u "lttng_ust_tracelog:*" + lttng start + [... run your program ...] + lttng stop + lttng view + +That's it! + +You can replace the enable-event line above with a selection of +loglevels, e.g.: + + lttng enable-event -u -a --loglevel TRACE_INFO + +Which will gather all events from TRACE_INFO and more important +loglevels. + +.PP + +.SH "USAGE WITH TRACEPOINT" .PP The simple way to generate the lttng-ust tracepoint probes is to use the lttng-gen-tp(1) tool. See the lttng-gen-tp(1) manpage for explanation. @@ -33,9 +99,13 @@ script, through an example: .nf To create a tracepoint provider, within a build tree similar to -examples/easy-ust installed with lttng-ust documentation, a -sample_component_provider.h for the general layout. This manpage will -focus on the various types that can be recorded into a trace event: +examples/easy-ust installed with lttng-ust documentation, see +sample_component_provider.h for the general layout. You will need to +define TRACEPOINT_CREATE_PROBES before including your tracepoint +provider probe in one source file of your application. See tp.c from +easy-ust for an example of a tracepoint probe source file. This manpage +will focus on the various types that can be recorded into a trace +event: TRACEPOINT_EVENT( /* @@ -57,11 +127,11 @@ TRACEPOINT_EVENT( sample_component, /* - * tracepoint name, same format as sample provider. Does not - * need to be declared before. in this case the name is - * "message" + * tracepoint name, characters permitted follow the same + * constraints as the provider name. The name of this example + * event is "sample_event". */ - message, + sample_event, /* * TP_ARGS macro contains the arguments passed for the tracepoint @@ -230,7 +300,7 @@ debug information. debug information with line-level scope (TRACEPOINT_EVENT default) TRACE_DEBUG 14 - debug-level message (trace_printf default) + debug-level message See lttng(1) for information on how to use LTTng-UST loglevels. @@ -255,6 +325,33 @@ 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 map events back to their call sites when analyzing the trace. + +Sometimes arguments to the probe are expensive to compute (e.g. +take call stack). To avoid the computation when the tracepoint is +disabled one can use more 'low level' tracepoint_enabled() and +do_tracepoint() macros as following: + + if (tracepoint_enabled(ust_tests_hello, tptest)) { + /* prepare arguments */ + do_tracepoint(ust_tests_hello, tptest, i, netint, values, + text, strlen(text), dbl, flt); + } + +Here do_tracepoint() doesn't contain check if the tracepoint is enabled. +Using tracepoint() in such scenario is dangerous since it also contains +enabled check and thus race condition is possible in the following code +if the tracepoint has been enabled after check in tracepoint_enabled() +but before tracepoint(): + + if (tracepoint_enabled(provider, name)) { /* tracepoint is disabled */ + prepare(args); + } + /* tracepoint is enabled by 'lttng' tool */ + tracepoint(provider, name, args); /* args wasn't prepared properly */ + +Note also that neither tracepoint_enabled() nor do_tracepoint() have +STAP_PROBEV() call so if you need it you should emit this call yourself. + .fi .SH "BUILDING/LINKING THE TRACEPOINT PROVIDER" @@ -264,17 +361,13 @@ There are 2 ways to compile the Tracepoint Provider with the application: either statically or dynamically. Please follow carefully: - 1.1) Compile the Tracepoint provider with the application, either - directly or through a static library (.a): - - Into exactly one object of your application: define + 1) Compile the Tracepoint Provider with the application, either + 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 - provider include (e.g. tp.c). - - Link application with "\-ldl". - - If building the provider directly into the application, - link the application with "\-llttng-ust". - - If building a static library for the provider, link the static - library with "\-llttng-ust". + provider include (e.g., tp.c). + - Link the application with "\-llttng-ust" and "\-ldl". - Include the tracepoint provider header into all C files using the provider. - Examples: @@ -342,6 +435,13 @@ Virtual process ID: process ID as seen from the point of view of the process namespace. .PP +.PP +.IP "ip" +Instruction pointer: Enables recording of the exact location where a tracepoint +was emitted. Can be used to reverse-lookup the source location that caused the +event to be emitted. +.PP + .PP .IP "procname" Thread name, as set by exec() or prctl(). It is recommended that @@ -355,11 +455,34 @@ Pthread identifier. Can be used on architectures where pthread_t maps nicely to an unsigned long type. .PP +.SH "BASE ADDRESS STATEDUMP" + +.PP +If an application that uses liblttng-ust.so becomes part of a session, +information about its currently loaded shared objects will be traced to the +session at session-enable time. To record this information, the following event +needs to be enabled: +.PP +.IP "ust_baddr_statedump:soinfo" +This event is used to trace a currently loaded shared object. The base address +(where the dynamic linker has placed the shared object) is recorded in the +"baddr" field. The path to the shared object gets recorded in the +"sopath" field (as string). The file size of the loaded object (in +bytes) is recorded to the "size" field and its time of last modification +(in seconds since Epoch) is recorded in the "mtime" field. +.PP +If the event above is enabled, a series of "ust_baddr_statedump:soinfo" +events is recorded at session-enable time. It represents the state of +currently loaded shared objects for the traced process. If this +information gets combined with the lttng-ust-dl(3) instrumentation, all +aspects of dynamic loading that are relevant for symbol and +line number lookup are traced by LTTng. +.PP .SH "ENVIRONMENT VARIABLES" .PP .IP "LTTNG_UST_DEBUG" -Activate liblttng-ust debug output. +Activate liblttng-ust debug and error output. .PP .IP "LTTNG_UST_REGISTER_TIMEOUT" The environment variable "LTTNG_UST_REGISTER_TIMEOUT" can be used to @@ -371,12 +494,21 @@ specified in milliseconds. The value 0 means "don't wait". The value recommended for applications with time constraints on the process startup time. .PP +.IP "LTTNG_UST_WITHOUT_BADDR_STATEDUMP" +Prevent liblttng-ust to perform a base-address statedump on session-enable. +.PP +.IP "LTTNG_UST_GETCPU_PLUGIN" +Used by the getcpu override plugin system. The environment variable +provides the path to the shared object which will act as the getcpu override +plugin. An example can be found in the lttng-ust documentation under +examples/getcpu-override . +.PP .SH "SEE ALSO" .PP lttng-gen-tp(1), lttng(1), babeltrace(1), lttng-ust-cyg-profile(3), -lttng-sessiond(8) +lttng-ust-dl(3), lttng-sessiond(8) .PP .SH "COMPATIBILITY"