Launch your application by preloading liblttng-ust-dl.so:
$ LD_PRELOAD=liblttng-ust-dl.so my-app
When the liblttng-ust-dl.so library is preloaded before a given application starts, it causes all calls to dlopen(3) and dlclose(3) in said application to be traced with LTTng-UST (see lttng-ust(3)).
See lttng(1) to learn more about how to control LTTng tracing sessions.
This LTTng-UST helper can also emit shared library load/unload events (see Shared library load/unload tracking in lttng-ust(3)). You should NOT use the event records generated by this LTTng-UST helper (prefixed with lttng_ust_dl:) to track the loading and unloading of shared libraries, especially in situations where a dynamically loaded library loads its own dependencies. Instead, do preload liblttng-ust-dl.so, but use the shared library load/unload event records, which are more reliable, for your tracking analysis.
The following LTTng-UST events are available when using this library.
lttng_ust_dl:dlopen
Fields:
Field name |
Description
|
baddr |
Base address of loaded library.
|
memsz |
Size of loaded library in memory.
|
flags |
Flags passed to
dlopen(3).
|
path |
Path to loaded library file.
|
has_build_id |
Whether or not the loaded library has a build ID. If this field is 1, you can expect that an
lttng_ust_dl:build_id
event record follows this one (not necessarily immediately after).
|
has_debug_link |
Whether or not the loaded library has debug link information. If this field is 1, you can expect that an
lttng_ust_dl:debug_link
event record follows this one (not necessarily immediately after).
|
lttng_ust_dl:dlmopen
Fields:
Field name |
Description
|
baddr |
Base address of loaded library.
|
memsz |
Size of loaded library in memory.
|
nsid |
ID of the namespace in which the library is loaded (as passed to
dlmopen(3)).
|
flags |
Flags passed to
dlmopen(3).
|
path |
Path to loaded library file.
|
has_build_id |
Whether or not the loaded library has a build ID. If this field is 1, you can expect that an
lttng_ust_dl:build_id
event record follows this one (not necessarily immediately after).
|
has_debug_link |
Whether or not the loaded library has debug link information. If this field is 1, you can expect that an
lttng_ust_dl:debug_link
event record follows this one (not necessarily immediately after).
|
lttng_ust_dl:dlclose
Fields:
Field name |
Description
|
baddr |
Base address of loaded library.
|
lttng_ust_dl:debug_link
Fields:
Field name |
Description
|
baddr |
Base address of loaded library.
|
filename |
Debug link file name.
|
crc |
Debug link file's CRC.
|
lttng_ust_dl:build_id
Fields:
Field name |
Description
|
baddr |
Base address of loaded library.
|
build_id |
Build ID.
|
If you encounter any issue or usability problem, please report it on the LTTng bug tracker <https://bugs.lttng.org/projects/lttng-ust>.
This library is part of the LTTng-UST project.
This library is distributed under the GNU Lesser General Public License, version 2.1 <http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html>. See the COPYING <https://github.com/lttng/lttng-ust/blob/v2.12.0-rc3/COPYING> file for more details.
Thanks to Ericsson for funding this work, providing real-life use cases, and testing.
Special thanks to Michel Dagenais and the DORSAL laboratory <http://www.dorsal.polymtl.ca/> at École Polytechnique de Montréal for the LTTng journey.
LTTng-UST was originally written by Mathieu Desnoyers, with additional contributions from various other people. It is currently maintained by Mathieu Desnoyers <mailto:mathieu.desnoyers@efficios.com>.
lttng-ust(3), dlopen(3), lttng(1)