Compilation de latrace 0.5.9
Attention, la compilation de latrace nécessite d'avoir flex, bison, et autoconf. Avoir le paquetage binutils-dev installé est optionnel. $ wget http://people.redhat.com/jolsa/latrace/dl/latrace-0.5.9.tar.(...)
$ tar xfj latrace-0.5.9.tar.bz2
$ cd latrace-0.5.9
$ aclocal && autoconf && ./configure && make && sudo make install
latrace est maintenant installé dans /usr/local.
Compilation d'un exécutable dynamique multithreadé
le fichier C suivant est tiré de l'échange de mail en lien sur la dépêche. $ cat > test.c << EOF
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
return 0;
}
EOF
$ gcc -o test test.c -lpthread
$ ./test
main PID 27180
In thread
thread PID 27180
In thread
thread PID 27180
threads joined
ltrace en action pour tracer les appels à sleep: $ ltrace -e sleep ./test
main PID 27228
In thread
thread PID 27228
+++ killed by SIGTRAP +++
Après avoir lu le man de ltrace, l'option -f permet de suivre les processus fils forkés : $ ltrace -e sleep -f ./test
main PID 27237
ltrace reste bloqué, vous pouvez le tuer avec ctrl+c, ctrl+z puis kill -9 %1.
À latrace de jouer maintenant : $ latrace -s sleep ./test
main PID 27204
In thread
thread PID 27204
In thread
thread PID 27204
27205 sleep [/lib/i686/cmov/libc.so.6]
27206 sleep [/lib/i686/cmov/libc.so.6]
threads joined
# pour ceux qui, comme saint thomas, ne croient que ce qu'ils voient
Posté par guillaume teissier . En réponse à la dépêche latrace, le traceur qui instrumente le chargeur dynamique. Évalué à 4.
Attention, la compilation de latrace nécessite d'avoir flex, bison, et autoconf. Avoir le paquetage binutils-dev installé est optionnel.
$ wget http://people.redhat.com/jolsa/latrace/dl/latrace-0.5.9.tar.(...)$ tar xfj latrace-0.5.9.tar.bz2
$ cd latrace-0.5.9
$ aclocal && autoconf && ./configure && make && sudo make install
latrace est maintenant installé dans /usr/local.
Compilation d'un exécutable dynamique multithreadé
le fichier C suivant est tiré de l'échange de mail en lien sur la dépêche.
$ cat > test.c << EOF
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *thread(void *i)
{
pthread_t t2,t3;
printf("In thread\n");
printf("thread PID %d\n", getpid());
sleep(5);
pthread_exit(0);
}
int main(int argc, char **argv)
{
pthread_t t1, t2;
printf("main PID %d\n", getpid());
pthread_create(&t1, NULL, thread, NULL);
pthread_create(&t2, NULL, thread, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
printf("threads joined\n");
return 0;
}
EOF
$ gcc -o test test.c -lpthread
$ ./test
main PID 27180
In thread
thread PID 27180
In thread
thread PID 27180
threads joined
ltrace en action pour tracer les appels à sleep:
$ ltrace -e sleep ./testmain PID 27228
In thread
thread PID 27228
+++ killed by SIGTRAP +++
Après avoir lu le man de ltrace, l'option -f permet de suivre les processus fils forkés :
$ ltrace -e sleep -f ./testmain PID 27237
ltrace reste bloqué, vous pouvez le tuer avec ctrl+c, ctrl+z puis kill -9 %1.
À latrace de jouer maintenant :
$ latrace -s sleep ./test
main PID 27204
In thread
thread PID 27204
In thread
thread PID 27204
27205 sleep [/lib/i686/cmov/libc.so.6]
27206 sleep [/lib/i686/cmov/libc.so.6]
threads joined
./test finished - exited, status=0