Convert man pages to AsciiDoc
[lttng-ust.git] / doc / man / lttng-ust.3
diff --git a/doc/man/lttng-ust.3 b/doc/man/lttng-ust.3
deleted file mode 100644 (file)
index 4adef5b..0000000
+++ /dev/null
@@ -1,619 +0,0 @@
-.TH "LTTNG-UST" "3" "February 16, 2012" "" ""
-
-.SH "NAME"
-lttng-ust \(em Linux Trace Toolkit Next Generation User-Space Tracer 2.x
-
-.SH "SYNOPSIS"
-
-.PP
-.nf
-Link liblttng-ust.so with applications, following this manpage.
-.fi
-.SH "DESCRIPTION"
-
-.PP
-LTTng-UST, the Linux Trace Toolkit Next Generation Userspace Tracer, is a
-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 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 <lttng/tracef.h>
-
-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 <lttng/tracelog.h>
-
-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.
-.PP
-
-.PP
-Here is the way to do it manually, without the lttng-gen-tp(1) helper
-script, through an example:
-.PP
-
-.SH "CREATION OF TRACEPOINT PROVIDER"
-
-.nf
-
-To create a tracepoint provider, within a build tree similar to
-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(
-       /*
-        * provider name, not a variable but a string starting with a
-        * letter and containing either letters, numbers or underscores.
-        * Needs to be the same as TRACEPOINT_PROVIDER. Needs to
-        * follow the namespacing guide-lines in lttng/tracepoint.h:
-        *
-        * Must be included before include tracepoint provider
-        * ex.: project_event
-        * ex.: project_component_event
-        *
-        * Optional company name goes here
-        *  ex.: com_efficios_project_component_event
-        *
-        * In this example, "sample" is the project, and "component" is the
-        * component.
-        */
-       sample_component,
-
-       /*
-        * tracepoint name, characters permitted follow the same
-        * constraints as the provider name. The name of this example
-        * event is "sample_event".
-        */
-       sample_event,
-
-       /*
-        * TP_ARGS macro contains the arguments passed for the tracepoint
-        * it is in the following format
-        *            TP_ARGS(type1, name1, type2, name2, ... type10,
-                                name10)
-        * where there can be from zero to ten elements.
-        * typeN is the datatype, such as int, struct or double **.
-        * name is the variable name (in "int myInt" the name would be
-        * myint)
-        *            TP_ARGS() is valid to mean no arguments
-        *            TP_ARGS(void) is valid too
-        */
-       TP_ARGS(int, anint, int, netint, long *, values,
-                char *, text, size_t, textlen,
-                double, doublearg, float, floatarg),
-
-       /*
-        * TP_FIELDS describes how to write the fields of the trace event.
-        * You can put expressions in the "argument expression" area,
-        * typically using the input arguments from TP_ARGS.
-        */
-       TP_FIELDS(
-               /*
-                * ctf_integer: standard integer field.
-                * args: (type, field name, argument expression)
-                */
-               ctf_integer(int, intfield, anint)
-               ctf_integer(long, longfield, anint)
-
-               /*
-                * ctf_integer_hex: integer field printed as hexadecimal.
-                * args: (type, field name, argument expression)
-                */
-               ctf_integer_hex(int, intfield2, anint)
-
-               /*
-                * ctf_integer_network: integer field in network byte
-                * order. (_hex: printed as hexadecimal too)
-                * args: (type, field name, argument expression)
-                */
-               ctf_integer_network(int, netintfield, netint)
-               ctf_integer_network_hex(int, netintfieldhex, netint)
-
-               /*
-                * ctf_array: a statically-sized array.
-                * args: (type, field name, argument expression, value)
-                */
-               ctf_array(long, arrfield1, values, 3)
-
-               /*
-                * ctf_array_text: a statically-sized array, printed as
-                * a string. No need to be terminated by a null
-                * character.
-                * Behavior is undefined if "text" argument is NULL.
-                */
-               ctf_array_text(char, arrfield2, text, 10)
-
-               /*
-                * ctf_sequence: a dynamically-sized array.
-                * args: (type, field name, argument expression,
-                *      type of length expression, length expression)
-                * The "type of length expression" needs to be an
-                * unsigned type. As a reminder, "unsigned char" should
-                * be preferred to "char", since the signedness of
-                * "char" is implementation-defined.
-                * Behavior is undefined if "text" argument is NULL.
-                */
-               ctf_sequence(char, seqfield1, text,
-                            size_t, textlen)
-
-               /*
-                * ctf_sequence_text: a dynamically-sized array, printed
-                * as string. No need to be null-terminated.
-                * Behavior is undefined if "text" argument is NULL.
-                */
-               ctf_sequence_text(char, seqfield2, text,
-                            size_t, textlen)
-
-               /*
-                * ctf_string: null-terminated string.
-                * args: (field name, argument expression)
-                * Behavior is undefined if "text" argument is NULL.
-                */
-               ctf_string(stringfield, text)
-
-               /*
-                * ctf_float: floating-point number.
-                * args: (type, field name, argument expression)
-                */
-               ctf_float(float, floatfield, floatarg)
-               ctf_float(double, doublefield, doublearg)
-
-               /*
-                * ctf_enum: a field using a previously declared
-                * enumeration args: (provider, enum name, container
-                * type, field name, argument expression). The
-                * enumeration itself and its values must have been
-                * defined previously with the TRACEPOINT_ENUM macro,
-                * described below.
-                */
-               ctf_enum(sample_component, enumeration_name, int,
-                             enumfield, enumarg)
-       )
-)
-
-There can be an arbitrary number of tracepoint providers within an
-application, but they must each have their own provider name. Duplicate
-provider names are not allowed.
-
-The CTF specification also supports enumerations that can be declared
-inside a tracepoint provider and used as fields in the tracepoint. This
-shows how to specify enumerations and what they can be used for:
-
-The enumeration is a mapping between an integer, or a range of integers, and a
-string. It can be used to have a more compact trace in cases where the possible
-values for a field are limited:
-
-TRACEPOINT_ENUM(
-       /*
-        * The provider name, as described in the TRACEPOINT_EVENT macro.
-        */
-       sample_component,
-
-       /*
-        * The name of this enumeration, that will be used when using this
-        * global type in tracepoint fields.
-        */
-       enumeration_name,
-
-       /*
-        * TP_ENUM_VALUES describe the values of this enumeration and what they
-        * map to.
-        */
-       TP_ENUM_VALUES(
-               /*
-                * Maps an integer with this string value. By default, enumerations
-                * start at 0 and increment 1 for each entry.
-                */
-               ctf_enum_value(string_value)
-
-               /*
-                * Maps the string value to integers in the range 'start' to 'end'
-                * inclusively. If 'start' == 'end', then the string is mapped to
-                * a specific value.
-                * Enumeration ranges may overlap, but the behavior is
-                * implementation-defined, each trace reader will handle overlapping
-                * as it wishes.
-                */
-               ctf_enum_range(start, end, string_value)
-       )
-)
-
-.fi
-
-.SH "ASSIGNING LOGLEVEL TO EVENTS"
-
-.nf
-
-Optionally, a loglevel can be assigned to a TRACEPOINT_EVENT using the
-following construct:
-
-       TRACEPOINT_LOGLEVEL(< [com_company_]project[_component] >,
-               < event >, < loglevel_name >)
-
-The first field is the provider name, the second field is the name of
-the tracepoint, and the third field is the loglevel name.  A
-TRACEPOINT_EVENT should be declared prior to the the TRACEPOINT_LOGLEVEL
-for a given tracepoint name. The TRACEPOINT_PROVIDER must be already
-declared before declaring a TRACEPOINT_LOGLEVEL.
-
-The loglevels go from 0 to 14. Higher numbers imply the most verbosity
-(higher event throughput expected.
-
-Loglevels 0 through 6, and loglevel 14, match syslog(3) loglevels
-semantic. Loglevels 7 through 13 offer more fine-grained selection of
-debug information.
-
-   TRACE_EMERG           0
-   system is unusable
-
-   TRACE_ALERT           1
-   action must be taken immediately
-
-   TRACE_CRIT            2
-   critical conditions
-
-   TRACE_ERR             3
-   error conditions
-
-   TRACE_WARNING         4
-   warning conditions
-
-   TRACE_NOTICE          5
-   normal, but significant, condition
-
-   TRACE_INFO            6
-   informational message
-
-   TRACE_DEBUG_SYSTEM    7
-   debug information with system-level scope (set of programs)
-
-   TRACE_DEBUG_PROGRAM   8
-   debug information with program-level scope (set of processes)
-
-   TRACE_DEBUG_PROCESS   9
-   debug information with process-level scope (set of modules)
-
-   TRACE_DEBUG_MODULE    10
-   debug information with module (executable/library) scope (set of
-   units)
-
-   TRACE_DEBUG_UNIT      11
-   debug information with compilation unit scope (set of functions)
-
-   TRACE_DEBUG_FUNCTION  12
-   debug information with function-level scope
-
-   TRACE_DEBUG_LINE      13
-   debug information with line-level scope (TRACEPOINT_EVENT default)
-
-   TRACE_DEBUG           14
-   debug-level message
-
-See lttng(1) for information on how to use LTTng-UST loglevels.
-
-.fi
-
-.SH "ADDING TRACEPOINTS TO YOUR CODE"
-
-.nf
-
-Include the provider header in each C files you plan to instrument,
-following the building/linking directives in the next section.
-
-For instance, add within a function:
-
-               tracepoint(ust_tests_hello, tptest, i, netint, values,
-                       text, strlen(text), dbl, flt);
-
-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
-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"
-
-.nf
-There are 2 ways to compile the Tracepoint Provider with the
-application: either statically or dynamically. Please follow
-carefully:
-
-  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 the application with "\-llttng-ust" and "\-ldl".
-    - Include the tracepoint provider header into all C files using
-      the provider.
-    - Examples:
-      - doc/examples/easy-ust/   sample.c sample_component_provider.h tp.c
-        Makefile
-      - doc/examples/hello-static-lib/   hello.c tp.c ust_test_hello.h Makefile
-
-  2) Compile the Tracepoint Provider separately from the application,
-     using dynamic linking:
-    - Into exactly one object of your application: define
-      "TRACEPOINT_DEFINE" _and_ also define
-      "TRACEPOINT_PROBE_DYNAMIC_LINKAGE", then include the tracepoint
-      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".
-    - Set a LD_PRELOAD environment to preload the tracepoint provider
-      shared object before starting the application when tracing is
-      needed. Another way is to dlopen the tracepoint probe when needed
-      by the application.
-    - Example:
-      - doc/examples/demo   demo.c  tp*.c ust_tests_demo*.h demo-trace Makefile
-
-  - 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 "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
-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 "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 and error output.
-.PP
-.IP "LTTNG_UST_REGISTER_TIMEOUT"
-The environment variable "LTTNG_UST_REGISTER_TIMEOUT" can be used to
-specify how long the applications should wait for sessiond
-"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
-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
-.IP "LTTNG_UST_CLOCK_PLUGIN"
-Used by the clock override plugin system. The environment variable
-provides the path to the shared object which will act as the clock override
-plugin. An example can be found in the lttng-ust documentation under
-doc/examples/clock-override .
-.PP
-
-.SH "SEE ALSO"
-
-.PP
-lttng-gen-tp(1), lttng(1), babeltrace(1), lttng-ust-cyg-profile(3),
-lttng-ust-dl(3), lttng-sessiond(8)
-.PP
-
-.SH "COMPATIBILITY"
-
-.PP
-Older lttng-ust libraries reject more recent, and incompatible, probe
-providers. Newer lttng-ust libraries accept older probe providers, even
-though some newer features might not be available with those providers.
-.PP
-
-.SH "BUGS"
-
-.PP
-LTTng-UST 2.0 and 2.1 lttng-ust libraries do not check for probe
-provider version compatibility. This can lead to out-of-bound accesses
-when using a more recent probe provider with an older lttng-ust library.
-These error only trigger when tracing is active. This issue has been
-fixed in LTTng-UST 2.2.
-
-If you encounter any issues or usability problem, please report it on
-our mailing list <lttng-dev@lists.lttng.org> to help improve this
-project.
-.SH "CREDITS"
-
-liblttng-ust is distributed under the GNU Lesser General Public License
-version 2.1. The headers are distributed under the MIT license.
-.PP
-See http://lttng.org for more information on the LTTng project.
-.PP
-Mailing list for support and development: <lttng-dev@lists.lttng.org>.
-.PP
-You can find us on IRC server irc.oftc.net (OFTC) in #lttng.
-.PP
-.SH "THANKS"
-
-Thanks to Ericsson for funding this work, providing real-life use-cases,
-and testing.
-
-Special thanks to Michel Dagenais and the DORSAL laboratory at
-Polytechnique de Montreal for the LTTng journey.
-.PP
-.SH "AUTHORS"
-
-.PP
-liblttng-ust was originally written by Mathieu Desnoyers, with additional
-contributions from various other people. It is currently maintained by
-Mathieu Desnoyers <mathieu.desnoyers@efficios.com>.
-.PP
This page took 0.028858 seconds and 4 git commands to generate.