.\" -*-nroff-*-
.\" Copyright (c) 2012, 2013 Petr Machata, Red Hat Inc.
.\" Copyright (c) 1997-2005 Juan Cespedes <cespedes@debian.org>
.\"
.\" This program is free software; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of the
.\" License, or (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
.\" General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program; if not, write to the Free Software
.\" Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
.\" 02110-1301 USA
.\"
.TH LTRACE "1" "January 2013" "" "User Commands"
.SH NAME
ltrace \- A library call tracer

.SH SYNOPSIS
.\"
.\" ---------------------------------------------------------------------------
.\"
.PP
.B ltrace
.\"
.\" What events to trace:
.\"
[\-e \fIfilter\fR|\-L] [\-l|\-\-library=\fIlibrary_pattern\fR]
[\-x \fIfilter\fR] [\-S] [\-b|\-\-no-signals]
.\"
.\" What to display with each event:
.\"
[\-i] [\-w|\-\-where=\fInr\fR] [\-r|\-t|\-tt|\-ttt] [\-T]
.\"
.\" Output formatting:
.\"
[\-F \fIpathlist\fR]
[\-A \fImaxelts\fR] [\-s \fIstrsize\fR] [\-C|\-\-demangle]
[\-a|\-\-align \fIcolumn\fR] [\-n|\-\-indent \fInr\fR]
[\-o|\-\-output \fIfilename\fR]
.\"
.\" Various:
.\"
[\-D|\-\-debug \fImask\fR] [\-u \fIusername\fR]
.\"
.\" What processes to trace:
.\"
[\-f] [\-p \fIpid\fR] [[\-\-] \fIcommand [arg ...]\fR]
.\"
.\" ---------------------------------------------------------------------------
.\"
.PP
.BR ltrace " -c"
.\"
.\" What events to trace:
.\"
[\-e \fIfilter\fR|\-L] [\-l|\-\-library=\fIlibrary_pattern\fR]
[\-x \fIfilter\fR] [\-S]
.\"
.\" Output formatting:
.\"
[\-o|\-\-output \fIfilename\fR]
.\"
.\" What processes to trace:
.\"
[\-f] [\-p \fIpid\fR] [[\-\-] \fIcommand [arg ...]\fR]
.\"
.\" ---------------------------------------------------------------------------
.\"
.PP
.BR ltrace " \-V|\-\-version"
.PP
.BR ltrace " \-h|\-\-help"

.SH DESCRIPTION
.B ltrace
is a program that simply runs the specified
.I command
until it exits.  It intercepts and records the dynamic library calls
which are called by the executed process and the signals which are
received by that process.
It can also intercept and print the system calls executed by the program.
.PP
Its use is very similar to
.BR strace(1) .

.B ltrace
shows parameters of invoked functions and system calls.  To determine
what arguments each function has, it needs external declaration of
function prototypes.  Those are stored in files called \fIprototype
libraries\fR--see ltrace.conf(5) for details on the syntax of these
files.  See the section \fBPROTOTYPE LIBRARY DISCOVERY\fR to learn how
\fBltrace\fR finds prototype libraries.

.SH OPTIONS
.PP
.IP "\-a, \-\-align \fIcolumn"
Align return values in a specific
.IR column
(default column is 5/8 of screen width).
.IP "\-A \fImaxelts"
Maximum number of array elements to print before suppressing the rest
with an ellipsis ("...").  This also limits number of recursive
structure expansions.
.IP "\-b, \-\-no-signals"
Disable printing of signals recieved by the traced process.
.IP \-c
Count time and calls for each library call and report a summary on
program exit.
.IP "\-C, \-\-demangle"
Decode (demangle) low-level symbol names into user-level names.
Besides removing any initial underscore prefix used by the system,
this makes C++ function names readable.
.IP "\-D, \-\-debug \fRmask\fI"
Show debugging output of \fBltrace\fR itself.  \fImask\fR is a number
with internal meaning that's not really well defined at all.
\fImask\fR of 77 shows all debug messages, which is what you usually
need.
.IP "\-e \fIfilter"
A qualifying expression which modifies which library calls to trace.
The format of the filter expression is described in the section
\fBFILTER EXPRESSIONS\fR.  If more than one \-e option appears on the
command line, the library calls that match any of them are traced.  If
no \-e is given, \fB@MAIN\fR is assumed as a default.
.IP \-f
Trace child processes as they are created by
currently traced processes as a result of the fork(2)
or clone(2) system calls.
The new process is attached immediately.
.IP "\-F \fIpathlist"
Contains a colon-separated list of paths.  If a path refers to a
directory, that directory is considered when prototype libraries are
searched (see the section \fBPROTOTYPE LIBRARY DISCOVERY\fR).  If it refers to
a file, that file is imported implicitly to all loaded prototype
libraries.
.IP "\-h, \-\-help"
Show a summary of the options to ltrace and exit.
.IP \-i
Print the instruction pointer at the time of the library call.
.IP "\-l, \-\-library \fIlibrary_pattern"
Display only calls to functions implemented by libraries that match
.I library_pattern.
Multiple library patters can be specified with several instances of
this option.  Syntax of library_pattern is described in section
\fBFILTER EXPRESSIONS\fR.

Note that while this option selects calls that might be directed to
the selected libraries, there's no actual guarantee that the call
won't be directed elsewhere due to e.g. LD_PRELOAD or simply
dependency ordering.  If you want to make sure that symbols in given
library are actually called, use \fB-x @\fIlibrary_pattern\fR instead.
.IP \-L
When no -e option is given, don't assume the default action of
\fB@MAIN\fR.
.IP "\-n, \-\-indent \fInr"
Indent trace output by \fInr\fR spaces for each level of call
nesting. Using this option makes the program flow visualization easy
to follow.  This indents uselessly also functions that never return,
such as service functions for throwing exceptions in the C++ runtime.
.IP "\-o, \-\-output \fIfilename"
Write the trace output to the file \fIfilename\fR rather than to
stderr.
.IP "\-p \fIpid"
Attach to the process with the process ID \fIpid\fR and begin tracing.
This option can be used together with passing a command to execute.
It is possible to attach to several processes by passing more than one
option \-p.
.IP \-r
Print a relative timestamp with each line of the trace.  This records
the time difference between the beginning of successive lines.
.IP "\-s \fIstrsize"
Specify the maximum string size to print (the default is 32).
.IP \-S
Display system calls as well as library calls
.IP \-t
Prefix each line of the trace with the time of day.
.IP \-tt
If given twice, the time printed will include the microseconds.
.IP \-ttt
If given thrice, the time printed will include the microseconds and
the leading portion will be printed as the number of seconds since the
epoch.
.IP \-T
Show  the  time  spent inside each call. This records the time difference
between the beginning and the end of each call.
.IP "\-u \fIusername"
Run command with the userid, groupid and supplementary groups of
.IR username .
This option is only useful when running as root and enables the
correct execution of setuid and/or setgid binaries.
.IP "\-w, --where \fInr"
Show backtrace of \fInr\fR stack frames for each traced function. This
option enabled only if libunwind support was enabled at compile time.
.IP "\-x \fIfilter"
A qualifying expression which modifies which symbol table entry points
to trace.  The format of the filter expression is described in the
section \fBFILTER EXPRESSIONS\fR.  If more than one \-x option appears
on the command line, the symbols that match any of them are traced.
No entry points are traced if no \-x is given.
.IP "\-V, \-\-version"
Show the version number of ltrace and exit.

.SH FILTER EXPRESSIONS

Filter expression is a chain of glob- or regexp-based rules that are
used to pick symbols for tracing from libraries that the process uses.
Most of it is intuitive, so as an example, the following would trace
calls to malloc and free, except those done by libc:

-e malloc+free-@libc.so*

This reads: trace malloc and free, but don't trace anything that comes
from libc.  Semi-formally, the syntax of the above example looks
approximately like this:

{[+-][\fIsymbol_pattern\fR][@\fIlibrary_pattern\fR]}

\fISymbol_pattern\fR is used to match symbol names,
\fIlibrary_pattern\fR to match library SONAMEs.  Both are implicitly
globs, but can be regular expressions as well (see below).  The glob
syntax supports meta-characters \fB*\fR and \fB?\fR and character
classes, similarly to what basic bash globs support.  \fB^\fR and
\fB$\fR are recognized to mean, respectively, start and end of given
name.

Both \fIsymbol_pattern\fR and \fIlibrary_pattern\fR have to match the
whole name.  If you want to match only part of the name, surround it
with one or two *'s as appropriate.  The exception is if the pattern
is not mentioned at all, in which case it's as if the corresponding
pattern were \fB*\fR.  (So \fBmalloc\fR is really \fBmalloc@*\fR and
\fB@libc.*\fR is really \fB*@libc.*\fR.)

In libraries that don't have an explicit SONAME, basename is taken for
SONAME.  That holds for main binary as well: \fB/bin/echo\fR has an
implicit SONAME of \fBecho\fR.  In addition to that, special library
pattern \fBMAIN\fR always matches symbols in the main binary and never
a library with actual SONAME \fBMAIN\fR (use e.g. \fB^MAIN\fR or
\fB[M]AIN\fR for that).

If the symbol or library pattern is surrounded in slashes (/like
this/), then it is considered a regular expression instead.  As a
shorthand, instead of writing \fB/x/@/y/\fR, you can write
\fB/x@y/\fR.

If the library pattern starts with a slash, it is not a SONAME
expression, but a path expression, and is matched against the library
path name.

The first rule may lack a sign, in which case \fB+\fR is assumed.  If,
on the other hand, the first rule has a \fB-\fR sign, it is as if
there was another rule \fB@\fR in front of it, which has the effect of
tracing complement of given rule.

The above rules are used to construct the set of traced symbols.  Each
candidate symbol is passed through the chain of above rules.
Initially, the symbol is \fIunmarked\fR.  If it matches a \fB+\fR
rule, it becomes \fImarked\fR, if it matches a \fB-\fR rule, it
becomes \fIunmarked\fR again.  If, after applying all rules, the
symbol is \fImarked\fR, it will be traced.

.SH PROTOTYPE LIBRARY DISCOVERY

When a library is mapped into the address space of a traced process,
ltrace needs to know what the prototypes are of functions that this
library implements.  For purposes of ltrace, prototype really is a bit
more than just type signature: it's also formatting of individual
parameters and of return value.  These prototypes are stored in files
called prototype libraries.

After a library is mapped, ltrace finds out what its SONAME is.  It
then looks for a file named SONAME.conf--e.g. protolib for libc.so.6
would be in a file called libc.so.6.conf.  When such file is found
(more about where ltrace looks for these files is below), ltrace reads
all prototypes stored therein.  When a symbol table entry point (such
as those traced by -x) is hit, the prototype is looked up in a
prototype library corresponding to the library where the hit occured.
When a library call (such as those traced by -e and -l) is hit, the
prototype is looked up in all prototype libraries loaded for given
process.  That is necessary, because a library call is traced in a PLT
table of a caller library, but the prototype is described at callee
library.

If a library has no SONAME, basename of library file is considered
instead.  For the main program binary, basename is considered as well
(e.g. protolib for /bin/echo would be called echo.conf).  If a name
corresponding to soname (e.g. libc.so.6.conf) is not found, and the
module under consideration is a shared library, ltrace also tries
partial matches.  Ltrace snips one period after another, retrying the
search, until either a protolib is found, or X.so is all that's left.
Thus libc.so.conf would be considered, but libc.conf not.

When looking for a prototype library, ltrace potentially looks into
several directories.  On Linux, those are $XDG_CONFIG_HOME/ltrace,
$HOME/.ltrace, \fIX\fR/ltrace for each \fIX\fR in $XDG_CONFIG_DIRS and
/usr/share/ltrace.  If the environment variable XDG_CONFIG_HOME is not
defined, ltrace looks into $HOME/.config/ltrace instead.

There's also a mechanism for loading legacy config files.  If
$HOME/.ltrace.conf exists it is imported to every loaded prototype
library.  Similarly for /etc/ltrace.conf.  If both exist, both are
imported, and $HOME/.ltrace.conf is consulted before /etc/ltrace.conf.

If -F contains any directories, those are searched in precedence to
the above system directories, in the same order in which they are
mentioned in -F.  Any files passed in -F are imported similarly to
above legacy config files, before them.

See ltrace.conf(5) for details on the syntax of ltrace prototype
library files.

.SH BUGS
It has most of the bugs stated in
.BR strace(1) .
.LP
It only works on Linux and in a small subset of architectures.
.LP
.PP
If you would like to report a bug, send a message to the mailing list
(ltrace-devel@lists.alioth.debian.org), or use the
.BR reportbug(1)
program if you are under the Debian GNU/Linux distribution.

.SH FILES
.TP
.I /etc/ltrace.conf
System configuration file
.TP
.I ~/.ltrace.conf
Personal config file, overrides
.I /etc/ltrace.conf

.SH AUTHOR
Juan Cespedes <cespedes@debian.org>
.br
Petr Machata <pmachata@redhat.com>

.SH "SEE ALSO"
.BR ltrace.conf(5),
.BR strace(1) ,
.BR ptrace(2)
