J'utilise strace et SystemTap pour obtenir des traces de pile lors d'appels système. Ce que je reçois actuellement montre le nom de la fonction mais pas le nom du fichier et le numéro de ligne. Une trace de strace sur ls
en utilisant -k
Option:Convertir des symboles de débogage en fichiers et en numéros de ligne
> /usr/lib64/libc-2.22.so(_IO_file_close+0xb) [0x7890b]
> /usr/lib64/libc-2.22.so(_IO_file_close_it+0x120) [0x79f40]
> /usr/lib64/libc-2.22.so(fclose+0x183) [0x6db93]
> /code/coreutils/src/ls(close_stream+0x1a) [0x1232a]
> /code/coreutils/src/ls(close_stdout+0x12) [0x9d52]
> /usr/lib64/libc-2.22.so(__run_exit_handlers+0xe8) [0x39658]
> /usr/lib64/libc-2.22.so(exit+0x15) [0x396a5]
> /usr/lib64/libc-2.22.so(__libc_start_main+0xf7) [0x20587]
> /code/coreutils/src/ls(_start+0x29) [0x4629]
Un autre de SystemTap à nouveau de ls
avec une légère modification de strace.stp
dans les exemples:
0x7f17e06eb607 : munmap+0x7/0x30 [/usr/lib64/libc-2.17.so]
0x7f17e0672882 : _IO_setb+0x62/0x70 [/usr/lib64/libc-2.17.so]
0x7f17e0671030 : [email protected]@GLIBC_2.2.5+0xb0/0x180 [/usr/lib64/libc-2.17.so]
0x7f17e0665020 : [email protected]@GLIBC_2.2.5+0x180/0x210 [/usr/lib64/libc-2.17.so]
0x4122ba : close_stream+0x1a/0x80 [/usr/bin/ls]
0x40a8b5 : close_stdout+0x15/0xc0 [/usr/bin/ls]
0x7f17e0632e69 : __run_exit_handlers+0xd9/0x110 [/usr/lib64/libc-2.17.so]
0x7f17e0632eb5 : exit+0x15/0x20 [/usr/lib64/libc-2.17.so]
0x40449c : main+0x1aec/0x2198 [/usr/bin/ls]
0x7f17e061bb15 : __libc_start_main+0xf5/0x1c0 [/usr/lib64/libc-2.17.so]
0x404b71 : _start+0x29/0x38 [/usr/bin/ls]
Comment puis-je convertir les nombres hexadécimaux pour obtenir les noms de fichier et les numéros de ligne?
Merci, la première solution fonctionne très bien, mais est lente. Je n'ai pas pu faire fonctionner le second. on dirait que stap ne regarde pas les informations de débogage des paquets de l'espace utilisateur –
Oui, un bug a dû apparaître récemment. Peut-être que vous frappez aussi https://sourceware.org/bugzilla/show_bug.cgi?id=20288. – fche
Merci de confirmer et de créer le rapport de bogue. –