[Ltrace-devel] Tracing dependent libraries

Rodrigo Dominguez roddomi at hotmail.com
Thu Apr 1 00:10:40 UTC 2010


It works great. Thank you.

 

From: Joe Damato [mailto:ice799 at gmail.com] 
Sent: Wednesday, March 31, 2010 2:35 PM
To: Rodrigo Dominguez
Cc: ltrace-devel at lists.alioth.debian.org
Subject: Re: [Ltrace-devel] Tracing dependent libraries

 

Hi -

 

Sorry for the delayed response. Very busy few days. You need to specify on
the command line the name of the symbol you want to trace. I'm actually not
sure if -c works with libdl symbols, but I THINK it does. Please let me
know. If not, I can fix it.

 

You name the symbol on the command line with -x, so for example I usually
use ltrace like this:

 

ltrace -ttTgx functionB -x functionC -x functionD

 

tt - prefix line with time of day in microsecs

T - amount of time spent in the call

g - an option I added to tell ltrace NOT to trace libc -- tracing libc can
be noisy and annoying

x - the symbol name I want to trace

 

x will look for the symbol name in the binary and all currently linked
libraries (i.e. if you ltrace attached after dlsym, it'll pick it up just
fine) and if nothing is found it'll listen and attach when the symbol is
dlsym'd later (i.e. if you start your application with ltrace and dlsym
hasnt happened yet).

 

let me know if it works for you --

joe

 

On Tue, Mar 30, 2010 at 1:13 PM, Rodrigo Dominguez <roddomi at hotmail.com>
wrote:

Joe,

Option 2 below compiles on my system. However, I am not sure I am getting
the libdl features you added. I wrote a small test program that uses dlopen
to load a library file  I created (libB.so):

#include <dlfcn.h>

int main(void)
{
    void *handle;
    int (*myFunctionB)(void);

    handle = dlopen("./libB.so", RTLD_LAZY);
    myFunctionB = dlsym(handle, "functionB");
    (*myFunctionB)();

    return 0;
}

Neither the system ltrace nor your ltrace show the call to functionB. This
is the output:

$ ltrace -c ./a.out
Inside libB::functionB
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 99.36    0.003254        3254         1 dlopen
  0.64    0.000021          21         1 dlsym
------ ----------- ----------- --------- --------------------
100.00    0.003275                     2 total

Am I missing something? Or am I misunderstanding the libdl support you
added?

Thank you.

  _____  

Date: Tue, 30 Mar 2010 11:53:02 -0700


Subject: Re: [Ltrace-devel] Tracing dependent libraries

From: ice799 at gmail.com
To: roddomi at hotmail.com; ltrace-devel at lists.alioth.debian.org



Replying to this on-list just incase other people have this problem.

 

Not sure if I ever submit this patch back to the list, but I added support
for backtraces so you can see the function call stack for traced functions.

 

The problem with this feature is that I didn't take the time to fix the
configure script so that it would disable that code if you don't have
libunwind on your system.

 

There are two solutions:

 

1.) The simplest solution (until I or some one else fixes the configure
script) is to install libunwind library and header files on your system and
try building my branch again.

 

or

 

2.) Rewind the source tree in git to before that commit was made. To do this
you can just: git checkout a95f1 -b before_unwind

 

That will create a local branch called "before_unwind" (the first byte of
the sha before the libunwind commit are a95f1).

 

The downside is that if you do this you lose some of the man page cleanup
and a small bugfix.

 

Sorry for the pain.

 

joe

 

On Tue, Mar 30, 2010 at 11:11 AM, Rodrigo Dominguez <roddomi at hotmail.com>
wrote:

Thanks. I was able to checkout your code.

I am getting the following errors after ‘./configure && make’

 

make -C sysdeps/linux-gnu

make[1]: Entering directory `/home/rdomingu/ltrace/sysdeps/linux-gnu'

gcc -Wall -g -O2 -iquote /home/rdomingu/ltrace -iquote
/home/rdomingu/ltrace/sysdeps/linux-gnu -DSYSCONFDIR=\"/usr/local/etc\"  -I
/usr/include/libelf -I/home/rdomingu/ltrace/sysdeps/linux-gnu/x86_64  -c -o
events.o events.c

In file included from events.c:12:

/home/rdomingu/ltrace/common.h:1:23: error: libunwind.h: No such file or
directory

In file included from /home/rdomingu/ltrace/common.h:11,

                 from events.c:12:

/home/rdomingu/ltrace/elf.h:4:18: error: gelf.h: No such file or directory

In file included from /home/rdomingu/ltrace/common.h:11,

                 from events.c:12:

/home/rdomingu/ltrace/elf.h:9: error: expected specifier-qualifier-list
before âElfâ

/home/rdomingu/ltrace/elf.h:50: error: expected â=â, â,â, â;â, âasmâ or
â__attribute__â before âarch_plt_sym_valâ

In file included from events.c:12:

/home/rdomingu/ltrace/common.h:193: error: expected specifier-qualifier-list
before âunw_addr_space_tâ

In file included from events.c:12:

/home/rdomingu/ltrace/common.h:234: error: expected declaration specifiers
or â...â before âGElf_Symâ

/home/rdomingu/ltrace/common.h:236: error: expected â)â before âaddrâ

make[1]: *** [events.o] Error 1

make[1]: Leaving directory `/home/rdomingu/ltrace/sysdeps/linux-gnu'

make: *** [sysdeps/sysdep.o] Error 2

 

From: Joe Damato [mailto:ice799 at gmail.com] 
Sent: Tuesday, March 30, 2010 1:12 PM


To: Rodrigo Dominguez
Cc: ltrace-devel at lists.alioth.debian.org
Subject: Re: [Ltrace-devel] Tracing dependent libraries

 

 

Not a dumb question at all. My code isn't part of the official repository,
but it is on github at: git://github.com/ice799/ltrace.git 

 

My code is in the branch "libdl"

 

So you should:

 

git clone git://github.com/ice799/ltrace.git

git checkout -b libdl origin/libdl

 

and you will be sitting in the libdl branch.

 

You can take a look at the commits on that branch by doing git log. If a
particular commit interests you, you can git show <sha> to look at the diff.

 

If you have any other questions/issues getting my code or getting it to
build feel free to email me off list.

 

joe

 

On Tue, Mar 30, 2010 at 9:35 AM, Rodrigo Dominguez <roddomi at hotmail.com>
wrote:

Joe,

 

I am sorry for the dumb question but how do you checkout a branch from
github. I am not familiar with git. I ran:

 

git clone git://git.debian.org/git/collab-maint/ltrace.git

 

but this only gets me the master branch.

 

Thank you.

 

From: Joe Damato [mailto:ice799 at gmail.com] 
Sent: Tuesday, March 09, 2010 5:20 PM
To: Rodrigo Dominguez
Cc: ltrace-devel at lists.alioth.debian.org
Subject: Re: [Ltrace-devel] Tracing dependent libraries

 

I implemented support for libdl and you can get that tree from github:
http://github.com/ice799/ltrace/tree/libdl

I have *not* implemented tracing calls from libraries to other libraries,
though. doing that should be pretty straightforward. i don't really have the
cycles right now to implement that in the near term but I am willing to
point people in the right direction if they are interested in implementing
it.

 

otherwise as soon as i have time to do it (probably later this month), i can
implement it.

 

joe 

 

On Tue, Mar 9, 2010 at 2:13 PM, Rodrigo Dominguez <roddomi at hotmail.com>
wrote:

How can I get ltrace to trace dependent libraries (libraries called from
within libraries)? All I was able to find was this old post:

http://sourceware.org/ml/binutils/2006-09/msg00009.html

Has this been implemented since then?

Thank you.


_______________________________________________
Ltrace-devel mailing list
Ltrace-devel at lists.alioth.debian.org
http://lists.alioth.debian.org/mailman/listinfo/ltrace-devel

 

 

 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/ltrace-devel/attachments/20100331/19465261/attachment-0001.htm>


More information about the Ltrace-devel mailing list