strace ist eine Open-Source- und frei verteilte Software für Entwickler und Systemadministratoren, die einen in C implementierten Systemaufruf-Tracer bereitstellt, der ausschließlich unter GNU / Linux-Betriebssystemen ausgeführt werden kann.
Das Programm ist ein sehr nützliches Debugging-, Anweisungs- und Diagnoseprogramm, das alle Systemaufrufe erfassen kann, die von einem Programm oder einem Prozess generiert werden, und eine Ablaufverfolgung ausdrucken. Es ist ein Befehlszeilenprogramm, das nur von einer Konsolenumgebung oder über eine Terminalemulator-App verwendet werden kann.
Das Tool kann von Diagnostikern, Problemlösern und Systemadministratoren verwendet werden, die eine unbezahlbare Lösung für die Lösung von Problemen mit Closed-Source-Programmen suchen. Es wurde von Dmitry V. Levin, Roland McGrath und Wichert Akkerman geschrieben.
Befehlszeilenoptionen
Wie jede andere Befehlszeilen-Software bietet auch strace eine Vielzahl von Befehlszeilenoptionen, mit denen der Benutzer alle Funktionen und Funktionen einfach nutzen kann, um seine Aufgaben zu erfüllen. Alle Befehlszeilenoptionen können auf einen Blick angezeigt werden, indem Sie den Befehl "strace --help & rsquo" ausführen. Befehl.
Unter den interessantesten Befehlszeilenoptionen können wir die Unterstützung für Zählzeiten, Aufrufe und Fehler für jeden Syscall, Unterstützung für das Zusammenfassen der Syscall-Latenz, Unterstützung für das Verfolgen von Zugriffen auf einen bestimmten Pfad, Unterstützung für das Aktivieren der Debug-Ausgabe für stderr erwähnen. sowie Unterstützung für die Ausführung eines Tracer-Prozesses als freistehendes Enkelkind, nicht als Elternteil.
Darüber hinaus können Sie Trace-Informationen an eine bestimmte Datei anstelle von stderr senden, um den Overhead für das Verfolgen von syscalls auf Overhead-Usecs festzulegen und eine PID-Datei für den Trace-Prozess festzulegen, um die Länge der Druckzeichenfolgen zu begrenzen Chars strsize, Befehle als benutzername handling setgid und / oder setuid ausführen und auf einem bestimmten syscall trennen.
Erste Schritte mit strace
strace wird nur als Quell-Tarball verbreitet, kann aber leicht auf zahlreichen Linux-Distributionen von ihren Haupt-Software-Repositories installiert werden. Um es aus Quellen zu installieren, laden Sie einfach die neueste Version von Softoware herunter, speichern Sie das Archiv an einem Ort Ihrer Wahl und entpacken Sie es.
Öffnen Sie eine Terminal App, gehen Sie zum Speicherort der extrahierten Archivdateien (z. B. cd /home/softoware/strace-4.9), führen Sie die ./configure && make & rsquo; Befehl, um strace zu konfigurieren und zu kompilieren, und führen dann das & lsquo; make install & rsquo; Befehl als root oder das & lsquo; sudo make install & rsquo; Befehl als privilegierter Benutzer, um strace systemweit zu installieren.
Was ist neu in dieser Version:
- Verbesserungen:
- Hinzugefügt -yy Option zum Drucken von Protokoll- und Adressinformationen, die Socket-Deskriptoren zugeordnet sind.
- Erweitert & quot; -e read = set & quot; und & quot; -e schreiben = setzen & quot; Optionen für sendmsg, recvmsg, sendmmsg und recvmmsg syscalls.
- Implementierung der 32-Bit-Decodierung von ioctl-Befehlen (Adressen Debian-Fehler # 692913 und Fedora-Fehler # 902788).
- Implementierte PTRACE_GETREGS API-Unterstützung auf ia64.
- Implementierte PTRACE_GETREGS API-Unterstützung für Mips.
- Implementierung der PTRACE_GETREGSET-API-Unterstützung für s390 / s390x.
- Implementierung der Dekodierung von systemcalls "betragrandom" und "seccomp".
- Die vollständige Decodierung von 64-Bit-Funktionssätzen wurde implementiert.
- Dekodierung aller prctl-Befehle implementiert.
- Implementierte Decodierung von parametrierten ioctl-Befehlen.
- Implementierte Decodierung von evdev ioctl-Befehlen.
- Implementierte Decodierung von v4l ioctl-Befehlen.
- Implementierung der Decodierung von SG_IO v4 ioctl-Befehlen.
- Implementierte Decodierung von FIFREEZE / FITHAW / FITRIM ioctl-Befehlen.
- Die Dekodierung von FALLOC_FL_ * Fallocate-Flags wurde implementiert.
- Implementierung der Decodierung der rt_sigreturn Signalmaske auf aarch64, x32 und x86_64.
- Erweiterter Socket-Decoder zur Unterstützung von Bluetooth-Sockets.
- Verbesserte Decodierung nicht aufgelisteter ioctl-Befehle.
- Erweiterte Dekodierung von getsockopt und setsockopt syscall.
- Verbesserte Decodierung von sysinfo syscall.
- Verbesserte Decodierung von struct cmsghdr.
- Verbesserte Decodierung des Wartezustands.
- Erweiterte AIO-Unterstützung für Nicht-x86-Architekturen mit externem libao.h.
- O_TMPFILE zur Liste der erkannten Open-Mode-Flags hinzugefügt.
- Die Liste der Konstanten des Dateisystemtyps wurde aktualisiert, die bei der Decodierung von statfs family syscalls verwendet werden.
- Aktualisierte Listen der Konstanten CAP_ *, PR_ *, PTRACE_ *, SCHED_ *, SO_ *, SOL_ *, SWAP_FLAG_ * und TFD_ *.
- Aktualisierte Listen von Signalkonstanten aus Linux 3.19.
- Aktualisierte Listen von errno Konstanten von Linux 3.19.
- Aktualisierte Listen von ioctl-Befehlen von Linux 3.9.
- Neue syscall-Einträge hinzugefügt, die zu Linux 3.19 passen.
- Fehlerkorrekturen:
- Verschiedene Fehler bei der Zuordnung zwischen Syscall-Nummern und zugehörigen Informationen wie der Anzahl der Syscall-Argumente, dem Namen von syscall und dem Syscall-Decoder wurden behoben.
- Probleme mit Zitaten bei Druckdeskriptoren, Dateinamen, Netzwerkschnittstellennamen, Mitgliedern von Strukturnamen, Geräte- / Volume-Namen von BLK * ioctl-Befehlen behoben.
- Es wurde die uid_t / git_t Decodierung korrigiert.
- Es wurden Probleme beim Lesen von out-of-bounds in getdents / getdents64-Decodern behoben.
- Es wurde ein Fehler beim Öffnen von Flags für offene Flags auf einigen Architekturen behoben.
- Dekodierung von struct ifreq.ifr_name korrigiert.
- Die Decodierung des ioctl-Befehls SIOCSIFNAME wurde korrigiert.
- Die Dekodierung von RENAME_ * renameat2 Flags wurde korrigiert.
- Die Dekodierung von UTIME_NOW / UTIME_OMIT timeval-Strukturen wurde korrigiert.
- Dekodierung indirekter IPC-Unteralarme auf einigen Architekturen wurde behoben.
- Die Decodierung von fanotify_mark syscall auf 32-Bit-Architekturen wurde korrigiert.
- Die Decodierung von 32-Bit-Stat-Strukturen auf 64-Bit-Architekturen wurde korrigiert.
- Die Decodierung der 32-Bit-Struktur cmsghdr auf 64-Bit-Architekturen wurde korrigiert.
- Festgelegte Decodierung von 32-Bit-Preadv / Pwritev-Offset auf 64-Bit-Architekturen.
- Die Decodierung der Sigreturn / rt_Sigreturn-Signalmaske auf ia64, ppc, ppc64, sparc, sparc64, mips und s390 wurde korrigiert.
- Feste Befehlszeigerausgabe (Option -i) auf Architekturen, die mehrere Persönlichkeiten unterstützen.
- Festes Verhalten von & quot; -e read = set & quot; und & quot; -e schreiben = setzen & quot; wenn sich Lese- und Schreibmengen überschneiden.
- Behobene Builds auf Systemen, auf denen struct sigaction kein Mitglied sa_restorer hat.
- Behobenes Build mit uclibc und musl libc.
- Portabilität:
- Linux-Kernel & gt; = 2.5.46 ist erforderlich. Ältere Versionen ohne eine vernünftige PTRACE_SETOPTIONS-Unterstützung funktionieren nicht.
- Auf Mips ist Linux Kernel & gt; = 2.6.15 erforderlich. Ältere Versionen ohne anständige PTRACE_GETREGS-Unterstützung funktionieren nicht.
- Auf s390 und s390x ist Linux Kernel & gt; = 2.6.27 erforderlich. Ältere Versionen ohne anständige PTRACE_GETREGSET-Unterstützung funktionieren nicht.
Was ist neu in Version 4.9:
- Änderungen im Verhalten:
- Deaktivierte OABI-Unterstützung für ARM EABI-Systeme standardmäßig, Option --enable-arm-oabi hinzugefügt, um sie bei der Konfiguration zu aktivieren.
- Verbesserungen:
- Die experimentelle Option -k wurde hinzugefügt, um den Stack-Trace nach jedem verfolgten Syscall zu drucken.
- Die Option -w wurde hinzugefügt, um Statistiken über die Syscall-Latenz zu erzeugen. (Adressen Debian-Fehler # 457497).
- Unterstützung für ARC-Architektur hinzugefügt.
- PTRACE_GETREGS API-Unterstützung für PowerPC wurde hinzugefügt.
- Verbesserte Unterstützung für Bionic libc und musl libc.
- Erweiterte Verfolgung von x86-Persönlichkeitsprozessen auf x86_64 und x32.
- Verbesserte Verfolgung von ARM-Persönlichkeitsprozessen auf AArch64.
- Verbesserte 32/64-Bit-Persönlichkeitserkennung auf PowerPC.
- Die Dekodierung von syscalls add_key, ioprio_get, ioprio_set, kexec_load, keyctl, renameat2 und request_key wurde implementiert.
- Robuste Decodierung von Select-, Pselect- und Io_submit-Syscalls.
- Erweiterte Decodierung von delete_module, fanotify_init, fanotify_mark, fcntl, setdomainname, sethostname, setns und sync_file_range syscalls.
- Verbesserte Decodierung von Signal-Bitmasken.
- Verbesserte Decodierung von Dateideskriptoren.
- Verbesserte siginfo_t-Decodierung.
- Verbesserte PF_NETLINK-Decodierung.
- Aktualisierte CLOCK_ * -Konstanten (Adressen Fedora-Fehler # 1088455).
- Neue syscall-Einträge hinzugefügt, um Linux 3.16 zu entsprechen.
- Fehlerkorrekturen:
- Shmat und shmdt wurden dem Satz von Speicherzuordnungs-bezogenen Syscalls hinzugefügt.
- Abhängen von angehaltenen Prozessen wurde behoben.
- Die fanotify_mark-Decodierung auf 32-Bit-Architekturen wurde behoben.
- Feste Offset-Dekodierung in den Syscalls preadv und pwritev.
- Die Dekodierung für glibc im _FORTIFY_SOURCE-Modus wurde korrigiert.
- Die Decodierung von epoll_ctl syscall mit dem EPOLL_CTL_DEL-Argument wurde korrigiert.
- Behobenes Build bei und Konflikt (adressiert Fedora Bug # 993384).
- Verschiedene Korrekturen in der Handbuchseite. (Adressen Debian Fehler # 725987).
Was ist neu in Version 4.8:
- Änderungen im Verhalten:
- Im Falle eines normalen Strace-Abschlusses, wenn die Trace-Ausgabe zu einer Pipe umgeleitet wird, schließt strace sie jetzt und wartet auf die Beendigung des Pipe-Prozesses vor dem Beenden.
- Verbesserungen:
- Implementierte Ablaufverfolgung mit PTRACE_SEIZE API (wenn verfügbar).
- Implementiert eine zuverlässigere PTRACE_GETREGSET-basierte Prozess-Persönlichkeitserkennung auf x86-64 und x32 (sofern verfügbar).
- Hinzugefügt -e trace = Speicheroption zum Verfolgen von Speicherzuordnungs-bezogenen Syscalls.
- Dokumentierte Option -b.
- Erlaubte Beendigungsstatusmeldungen, die unterdrückt werden sollen, indem zweimal die Option -q angegeben wird.
- Unterstützung für AArch64-Architektur hinzugefügt (Adressen Debian-Fehler # 693074 und Fedora-Fehler # 969858).
- Zusätzliche Unterstützung für OpenRISC 1000, Meta und Xtensa-Architekturen.
- Unterstützung für tilegx-Persönlichkeit für Tile.
- Verbesserte Unterstützung von NOMMU-Architekturen.
- Verbesserte Decodierung von getdents, mmap, perf_event_open, ptrace und quotactl syscalls.
- Neue syscall-Einträge hinzugefügt, die zu Linux 3.9 passen.
- Erneutes Generieren der Liste der gemeinsamen ioctl-Namen von Linux 3.9.
- Die Liste der errno Konstanten wurde aktualisiert.
- Aktualisierte Listen der Konstanten AF_ *, MADV_ *, MAP_ *, MSG_ *, MS_ *, PF_ *, PR_ *, PTRACE_O_ * und TCP_ *.
- Implementierte Dekodierung von UBI ioctls.
- Redundante "* 32" entfernt ioctl-Namen.
- Fehlerkorrekturen:
- Problem behoben, bei dem ERESTARTNOINTR auf alten Kernel in den Benutzerbereich gelaufen ist (Adressen Fedora Bug # 659382).
- Korrigiert Kernel-Release-String-Parsing (Adressen Debian-Fehler # 702309).
- Die Decodierung von * xattr syscalls (Adressen des Fedora-Fehlers # 885233) wurde korrigiert.
- Die Behandlung von Dateien mit 64-Bit-Inode-Nummern durch 32-Bit-Strace wurde korrigiert (Adressen Fedora-Fehler # 912790).
- Fehler bei der Verfolgung von SPARC behoben.
- Die Decodierung von fadvise64, fallocate, ftruncate64, io_submit, pread, preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl und truncate64 syscalls wurde korrigiert.
- Behobene Kategorien mehrerer Syscalls auf den meisten unterstützten Architekturen.
- Die Decodierung nicht-nativer 32-Bit-Personality wurde korrigiert. recv [m] msg syscalls.
- Die Decodierung mehrerer 32-Bit-Personality-Syscalls auf x32 wurde behoben.
- Die Decodierung langer langer syscall-Argumente auf ARM-, MIPS / o32-, PowerPC-, S390x- und Tile-Architekturen wurde behoben.
- Feste Semtimedop-Dekodierung auf S390x.
- Die sram_alloc-Dekodierung in Blackfin wurde behoben.
- Fehler behoben, wenn process_vm_readv ein Stab ist.
- Behobenes Build mit älteren Versionen von libaio.h.
Was ist neu in Version 4.7:
- Dies ist eine stabile Version mit den üblichen Bugfixes, verbesserter Unterstützung für frische Linux-Kernel und anderen Verbesserungen.
Was ist neu in Version 4.6:
- Dies ist eine stabile Version, mit üblichen Bugfixes, erweiterte Unterstützung für frische Linux-Kernel und andere Verbesserungen, einschließlich einer neuen Methode zum Folgen von Clone-, Fork- und Vfork-Syscalls unter Verwendung der expliziten Möglichkeiten des Linux-Kernels zum Nachverfolgen der Erstellung von Threads und untergeordneten Prozessen.
Was ist neu in Version 4.5.20:
- Verbesserungen:
- Dekodierung von neuen Linux-Syscalls implementiert: inotify_init1, recvmmsg.
- Die grundlegende Decodierung neuer Linux-Systemaufrufe wurde implementiert: preadv, pwritev, rt_tgsigqueueinfo, perf_event_open.
- Erweiterte Decodierung von kürzlich hinzugefügten syscalls auf Nicht-x86-Architekturen durch Ersetzen eines nackten Decodierers durch ausgefeilte Parser, die früher für x86 / x86-64 aktiviert wurden.
- Implementierte -C-Option zum Kombinieren der regulären und -c-Ausgabe. (Adressen Debian Fehler # 466196)
- Verbesserte Decodierung von mbind und mremap syscalls.
- Verbesserte SOL_PACKET Socket-Optionen Decodierung.
- Neu erstellte Liste von ioctl-Namen von Linux 2.6.33.
- Unterstützung für TILE-Architektur hinzugefügt.
- Fehlerkorrekturen:
- Behobenes Build mit Linux-Kernel-Headern 2.6.32-rc5 +. (Adressen Debian Bug # 560516 und Fedora Bug # 539044)
- Behobene Builds auf Mips.
- Behobene Behandlung von Linux-Systemen ohne struct statfs64.
- Die Meldesignalmaske wurde durch Sigreturn auf PowerPC behoben.
- Ein potenzieller Pufferüberlauf im ausgewählten Decoder wurde behoben. (Adressen Fedora Bug # 556678)
- Korrigierte msgsnd indirekte IP-Dekodierung.
- Korrigierte Decodierung von 64-Bit-Systemaufrufen. (Adressen Debian Fehler # 570603)
- Korrigierte getsockopt Decodierung auf Architekturen, wo sizeof (long) & gt; sizeof (int). (Adressen Debian Fehler # 494844)
- Korrigierte Decodierung von epoll_pwait. (Adressen Debian Fehler # 513014)
- Korrigierte Behandlung von getöteten Threads.
Kommentare nicht gefunden