strace to oprogramowanie open source i swobodnie dystrybuowane przeznaczone dla programistów i administratorów systemu, udostępniające funkcję śledzenia wywołań systemowych zaimplementowaną w języku C i zaprojektowaną do działania wyłącznie w systemach operacyjnych GNU / Linux.
Program jest bardzo przydatnym narzędziem do debugowania, instruktażu i diagnostyki, które może zebrać wszystkie wywołania systemowe wygenerowane przez program lub proces i wydrukować ślad. Jest to program wiersza poleceń, który może być używany tylko ze środowiska konsoli lub z aplikacji emulatora terminala.
Z narzędzia mogą korzystać diagnostycy, narzędzia do rozwiązywania problemów, a także administratorzy systemu, którzy potrzebują bezcennego rozwiązania do rozwiązywania problemów z programami o zamkniętym kodzie źródłowym. Napisali ją Dmitry V. Levin, Roland McGrath i Wichert Akkerman.
Opcje wiersza poleceń
Podobnie jak inne oprogramowanie linii poleceń, strace oferuje szeroką gamę opcji wiersza poleceń, które pozwalają użytkownikowi w łatwy sposób wykorzystać całą jego funkcjonalność i funkcje, aby osiągnąć swoje zadania. Wszystkie opcje wiersza poleceń można wyświetlić na pierwszy rzut oka, uruchamiając & lsquo; strace --help & rsquo; polecenie.
Wśród najciekawszych opcji wiersza polecenia można wymienić obsługę czasów liczenia, wywołań i błędów dla każdej z nich, obsługę podsumowania opóźnienia systemu, obsługę śledzenia dostępu do określonej ścieżki, obsługę włączania wyjścia debugowania na stderr, a także wsparcie dla procesu śledzenia jako odłączonego wnuka, a nie jako rodzica.
Dodatkowo będziesz mógł wysyłać informacje o śledzeniu do określonego pliku zamiast stderr, aby ustawić obciążenie dla śledzenia syscalls do narzutów, aby ustawić plik PID dla procesu śledzenia, aby ograniczyć długość ciągów drukowania aby zmienić znaki, uruchamiać polecenia jako nazwy użytkownika obsługujące setgid i / lub setuid, i odłączać się na określonej syscall.
Pierwsze kroki z strace
Strace jest rozprowadzane tylko jako archiwum źródłowe, ale może być łatwo zainstalowane na wielu dystrybucjach Linuksa z ich głównych repozytoriów oprogramowania. Aby zainstalować go ze źródeł, po prostu pobierz najnowszą wersję z Softoware, zapisz archiwum w wybranej lokalizacji i rozpakuj.
Otwórz aplikację Terminal, przejdź do lokalizacji wyodrębnionych plików archiwalnych (np. cd /home/softoware/strace-4.9), uruchom plik ./configure && make & rsquo; polecenie do skonfigurowania i kompilacji strace, a następnie do wykonania & lsquo; make install & rsquo; polecenie jako root lub polecenie & lsquo; sudo make install & rsquo; polecenie jako uprzywilejowany użytkownik, aby zainstalować system strace.
Co nowego w tej wersji:
- Ulepszenia:
- Dodano opcję drukowania informacji o protokole i adresie związanych z deskryptorami gniazd.
- Rozszerzone "-e read = set" i "-e write = set" i "-e write = set" opcje na pokrycie syscalls sendmsg, recvmsg, sendmmsg i recvmmsg.
- Zaimplementowano pełne 32-bitowe dekodowanie poleceń ioctl (adresy błędów Debiana nr 692913 i błędu # 902788 Fedory).
- Wdrożono obsługę interfejsu API PTRACE_GETREGS w wersji ia64.
- Wdrożono obsługę interfejsu API PTRACE_GETREGS w mipsach.
- Wdrożono obsługę interfejsu API PTRACE_GETREGSET na s390 / s390x.
- Wdrożono dekodowanie ścieżek getrandom i seccomp.
- Zaimplementowano pełne dekodowanie 64-bitowych zestawów możliwości.
- Wdrożono dekodowanie wszystkich poleceń PRCTL.
- Wdrożono dekodowanie sparametryzowanych poleceń ioctl.
- Wdrożono dekodowanie komend evocv ioctl.
- Wdrożono dekodowanie komend ioctl v4l.
- Wdrożono dekodowanie poleceń ioctl SG_IO v4.
- Wdrożono dekodowanie poleceń ioctl FIFREEZE / FITHAW / FITRIM.
- Wdrożono dekodowanie flag FALLOC_FL_ * fallocate.
- Wdrożono dekodowanie maski sygnału rt_sigreturn na aarch64, x32 i x86_64.
- Rozbudowany dekoder gniazda do obsługi gniazd bluetooth.
- Rozszerzone dekodowanie niepublicznych poleceń ioctl.
- Rozszerzone dekodowanie zestawów getsockopt i setsockopt.
- Rozszerzone dekodowanie sysinfo syscall.
- Rozszerzone dekodowanie struktury cmsghdr.
- Rozszerzone dekodowanie statusu oczekiwania.
- Rozszerzona obsługa aio na architekturach innych niż x86 przy użyciu zewnętrznego libaio.h.
- Dodano O_TMPFILE do listy rozpoznanych flag trybu otwartego.
- Zaktualizowano listę stałych typu systemu plików używanych do dekodowania rodzinnych plików statfs.
- Zaktualizowano listę wartości CAP_ *, PR_ *, PTRACE_ *, SCHED_ *, SO_ *, SOL_ *, SWAP_FLAG_ * i TFD_ *.
- Zaktualizowano listę stałych sygnału z systemu Linux 3.19.
- Zaktualizowano listę stałych errno w systemie Linux 3.19.
- Zaktualizowane listy poleceń ioctl z Linuksa 3.9.
- Dodano nowe wpisy syscall do wersji 3.19.
- Poprawki:
- Naprawiono różne błędy w odwzorowywaniu numerów syscall i powiązanych informacji, takich jak liczba argumentów syscall, nazwa syscall i dekoder syscall.
- Naprawiono problemy z cytowaniem w deskryptorach drukowania, nazwach plików, nazwach interfejsów sieciowych, nazwach członków struktury, nazwach urządzeń / woluminów poleceń BLK * ioctl.
- Naprawiono dekodowanie uid_t / git_t.
- Naprawiono potencjalne problemy z odczytem out-of-bounds w dekoderach getdents / getdents64.
- Naprawiono potencjalne obcinanie otwartych flag w niektórych architekturach.
- Naprawiono dekodowanie struct ifreq.ifr_name.
- Naprawiono dekodowanie komendy ioctl SIOCSIFNAME.
- Naprawiono dekodowanie flag RENAME_ * renameat2.
- Naprawiono dekodowanie struktur czasowych UTIME_NOW / UTIME_OMIT.
- Naprawiono dekodowanie pośrednich pod-ipc w niektórych architekturach.
- Naprawiono dekodowanie syscall fanotify_mark na architekturach 32-bitowych.
- Naprawiono dekodowanie 32-bitowych struktur statystycznych na architekturach 64-bitowych.
- Naprawiono dekodowanie 32-bitowego struct cmsghdr na 64-bitowych architekturach.
- Naprawiono dekodowanie 32-bitowego przesunięcia preadv / pwritev na architekturach 64-bitowych.
- Naprawiono dekodowanie maski sygnału sigreturn / rt_sigreturn na procesorach ia64, ppc, ppc64, sparc, sparc64, mips i s390.
- Naprawiono wyświetlanie wskaźnika instrukcji (opcja -i) na architekturach obsługujących kilka osobowości.
- Naprawiono zachowanie "-e read = set" i "-e write = set" i "-e write = set" gdy zbiory do odczytu i zapisu przecinają się.
- Naprawiono kompilację w systemach, w których struct sigaction nie ma członka sa_restorer.
- Naprawiono kompilację za pomocą biblioteki uclibc i musl libc.
- Przenośność:
- Wymagane jest jądro Linuksa & gt; = 2.5.46. Starsze wersje bez przyzwoitej obsługi PTRACE_SETOPTIONS nie będą działać.
- Na mips, jądro Linux & gt; = 2.6.15 jest wymagane. Starsze wersje bez przyzwoitej obsługi PTRACE_GETREGS nie będą działać.
- Na s390 i s390x wymagane jest jądro Linux & gt; = 2.6.27. Starsze wersje bez przyzwoitej obsługi PTRACE_GETREGSET nie będą działać.
Co nowego w wersji 4.9:
- Zmiany w zachowaniu:
- Wyłącznie obsługa OABI w systemach ARM EABI domyślnie, dodano opcję --enable-arm-oabi, aby włączyć ją w czasie konfiguracji.
- Ulepszenia:
- Dodano opcję eksperymentalną -k, aby wydrukować ślad stosu po każdej śledzonej syscall.
- Dodano opcję -w do tworzenia statystyk dotyczących opóźnień systemu. (odnosi się do błędu Debiana # 457497).
- Dodano obsługę architektury ARC.
- Dodano obsługę API PTRACE_GETREGS w PowerPC.
- Ulepszona obsługa libc i wsparcia dla bibliotek libli.
- Ulepszono śledzenie procesów osobowościowych x86 na x86_64 i x32.
- Lepsze śledzenie procesów osobowości ARM na AArch64.
- Ulepszone wykrywanie tożsamości w systemie 32/64-bitowym w PowerPC.
- Wdrożono dekodowanie klawiszy add_key, ioprio_get, ioprio_set, kexec_load, keyctl, renameat2 i request_key.
- Robustified dekodowanie wybieranych, pselect i io_submit syscalls.
- Rozszerzone dekodowanie parametrów delete_module, fanotify_init, fanotify_mark, fcntl, setdomainname, sethostname, setns i sync_file_range.
- Ulepszone dekodowanie bitmask bitów.
- Rozszerzone dekodowanie deskryptorów plików.
- Rozszerzone dekodowanie siginfo_t.
- Rozszerzone dekodowanie PF_NETLINK.
- Zaktualizowane stałe CLOCK_ * (adresy wirusa Fedory # 1088455).
- Dodano nowe wpisy syscall do wersji 3.16.
- Poprawki:
- Dodano shmat i shmdt do zestawu powiązanych ze sobą map systemowych pamięci.
- Naprawiono odłączanie od zatrzymanych procesów.
- Naprawiono dekodowanie fanotify_mark na 32-bitowych architekturach.
- Naprawiono dekodowanie offsetowe w systemach przedsądowych i pwritev.
- Naprawiono wybrane dekodowanie glibc w trybie _FORTIFY_SOURCE.
- Naprawiono dekodowanie pliku epoll_ctl syscall z argumentem EPOLL_CTL_DEL.
- Naprawiono kompilację podczas i konfliktów (dotyczy błędu Fedory # 993384).
- Różne poprawki na stronie podręcznika. (Adres błędu Debiana # 725987).
Co nowego w wersji 4.8:
- Zmiany w zachowaniu:
- W przypadku normalnego zakończenia linii, gdy dane wyjściowe śledzenia są przekierowywane do potoku, strace teraz zamyka je i czeka na zakończenie procesu rurowego przed zakończeniem.
- Ulepszenia:
- Zaimplementowano śledzenie przy użyciu interfejsu API PTRACE_SEIZE (jeśli jest dostępny).
- Wdrożyłem bardziej niezawodne wykrywanie osobowości procesowej w oparciu o protokół PTRACE_GETREGSET w systemach x86-64 i x32 (jeśli są dostępne).
- Dodano opcję -e trace = opcja pamięci do śledzenia powiązanej struktury pamięci.
- Udokumentowana opcja -b.
- Dozwolone komunikaty o stanie wyjścia zostały zablokowane przez dwukrotne podanie opcji -q.
- Dodano obsługę architektury AArch64 (adresy błędów Debiana nr 693074 i błędu Fedory # 969858).
- Dodano obsługę architektury OpenRISC 1000, Meta i Xtensa.
- Dodano obsługę osobowości Tilex dla Tile.
- Rozszerzone wsparcie dla architektury NOMMU.
- Rozszerzone dekodowanie getdents, mmap, perf_event_open, ptrace i linków systemowych quotactl.
- Dodano nowe wpisy syscall do wersji 3.9.
- Ponownie wygenerowana lista wspólnych nazw ioctl z Linux 3.9.
- Zaktualizowano listę stałych errno.
- Zaktualizowano listę wartości AF_ *, MADV_ *, MAP_ *, MSG_ *, MS_ *, PF_ *, PR_ *, PTRACE_O_ * i TCP_ *.
- Wdrożono dekodowanie identyfikatorów UBI ioctls.
- Usunięto nadmiarowe "* 32" Nazwy ioctl.
- Poprawki:
- Naprawiono wyciekanie ERESTARTNOINTR do przestrzeni użytkownika na starozytnych jądrach (adresy błędów # 659382).
- Naprawiono parsowanie ciągów wydań jądra (adresy błędów Debiana nr 702309).
- Naprawiono dekodowanie syscalls * xattr (adresy wirusa # 885233).
- Naprawiono obsługę plików z 64-bitowymi i-węzłami za pomocą 32-bitowego strace (adresy błędów Fedory # 912790).
- Naprawiono widły śledzenia w SPARC.
- Naprawiono dekodowanie ścieżek fadvise64, fallocate, ftruncate64, io_submit, pread, preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl i truncate64.
- Naprawiono kategorie wielu systemów w większości obsługiwanych architektur.
- Naprawiono dekodowanie nierodzimych 32-bitowych ścieżek recv [m] msg syscalls.
- Naprawiono dekodowanie wielu 32-bitowych ścieżek osobowości na x32.
- Naprawiono dekodowanie długo długich argumentów syscall w architekturach ARM, MIPS / o32, PowerPC, S390x i Tile.
- Naprawiono dekodowanie semtimedopu na S390x.
- Naprawiono dekodowanie sram_alloc na Blackfin.
- Naprawiono kompilację, gdy process_vm_readv jest nożem.
- Naprawiono kompilację ze starszymi wersjami libaio.h.
Co nowego w wersji 4.7:
- Jest to stabilne wydanie ze zwykłymi poprawkami błędów, ulepszoną obsługą świeżych serwerów Linux i innymi ulepszenia.
Co nowego w wersji 4.6:
- Jest to stabilna wersja ze zwykłymi poprawkami, ulepszoną obsługą w przypadku nowych wersji jądra systemu Linux i innych ulepszeń, w tym nowa metoda śledzenia klonowanych, widżetowych i vysokich systemów za pomocą jawnych narzędzi jądra Linuksa do śledzenia tworzenia wątków i procesów podrzędnych.
Co nowego w wersji 4.5.20:
- Ulepszenia:
- Wdrożono dekodowanie nowych linuksowych systemów linuksowych: inotify_init1, recvmmsg.
- Zaimplementowano podstawowe dekodowanie nowych systemów linuksowych: preadv, pwritev, rt_tgsigqueueinfo, perf_event_open.
- Udoskonalone dekodowanie ostatnio dodanych systemów baz danych na architekturach innych niż x86 poprzez zastąpienie gołego dekodera za pomocą rozbudowanych analizatorów wykonanych wcześniej dla x86 / x86-64.
- Wdrożono opcję -c łączenie danych wyjściowych regularnych i -c. (Adres błędu Debiana # 466196)
- Ulepszone dekodowanie ścieżek mbind i mremap.
- Rozszerzone dekodowanie opcji gniazda SOL_PACKET.
- Regenerowana lista nazw ioctl z linuksa 2.6.33.
- Dodano obsługę architektury TILE.
- Poprawki:
- Naprawiono kompilację z nagłówkami jądra Linuksa 2.6.32-rc5 +. (Adresy błędów Debiana # 560516 i błędu Fedory # 539044)
- Naprawiono kompilację na mipsach.
- Naprawiono obsługę systemów Linux bez struct statfs64.
- Naprawiono maskę sygnalizującą raportowanie przez sigreturn na powerpc.
- Naprawiono przepełnienie bufora stosu w dekoderze wyboru. (Adres błędu Fedory # 556678)
- Poprawiono pośrednie dekodowanie ipccall.
- Skorygowano dekodowanie 64-bitowych odsyłaczy. (Adresy błędów Debiana # 570603)
- Poprawiono dekodowanie getsockopt na architekturach, w których sizeof (long) & gt; sizeof (int). (Adres błędu Debiana # 494844)
- Poprawione dekodowanie epoll_pwait. (Adres błędu Debiana # 513014)
- Poprawiono obsługę zabitych wątków.
Komentarze nie znaleziono