Ich verwende strace und SystemTap, um Stack-Traces bei Systemaufrufen zu erhalten. Was ich gerade bekomme, zeigt den Funktionsnamen, aber nicht den Dateinamen und die Zeilennummer. Eine Spur von strace auf ls
mit -k
Option:Debugging-Symbole in Dateien und Zeilennummern konvertieren
> /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]
Ein anderes von SystemTap wieder von ls
mit einer leichten Modifikation von strace.stp
in den Beispielen:
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]
Wie konvertiere ich die hexadezimalen Zahlen zu erhalten die Dateinamen und Zeilennummern?
Dank, die erste Lösung funktioniert gut, aber langsam. Ich konnte den zweiten überhaupt nicht arbeiten lassen. es sieht aus wie stap ist nur nicht auf die Debug-Informationen der Userspace-Pakete –
Yeah, einige Bug muss vor kurzem aufgetaucht. Vielleicht treffen Sie auch https://sourceware.org/bugzilla/show_bug.cgi?id=20288. – fche
Vielen Dank für die Bestätigung und Erstellung des Fehlerberichts. –