strace è un software open source e liberamente distribuito progettato per sviluppatori e amministratori di sistema, che fornisce un tracciante di chiamate di sistema implementato in C e progettato per funzionare esclusivamente con sistemi operativi GNU / Linux.
Il programma è un'utilità di debug, istruzione e diagnostica molto utile che può raccogliere tutte le chiamate di sistema generate da un programma o un processo e stampare una traccia. È un programma da riga di comando che può essere utilizzato solo da un ambiente di console o tramite un'app emulatore di terminale.
Lo strumento può essere utilizzato da diagnostici, esperti di risoluzione dei problemi e amministratori di sistema che desiderano una soluzione impagabile per risolvere i problemi con i programmi closed-source. È scritto da Dmitry V. Levin, Roland McGrath e Wichert Akkerman.
Opzioni della riga di comando
Come ogni altro software da riga di comando, strace offre una vasta gamma di opzioni della riga di comando che consentono all'utente di utilizzare facilmente tutte le sue funzionalità e caratteristiche per poter svolgere i propri compiti. Tutte le opzioni della riga di comando possono essere visualizzate immediatamente eseguendo il & lsquo; strace --help & rsquo; comando.
Tra le più interessanti opzioni da riga di comando, possiamo citare il supporto per contare i tempi, le chiamate e gli errori per ogni syscall, il supporto per il riepilogo della latenza di syscall, il supporto per tracciare gli accessi a un determinato percorso, il supporto per abilitare l'output di debug su stderr, così come il supporto per l'esecuzione di un processo di tracciamento come nipote distaccato, non come genitore.
Inoltre, sarai in grado di inviare informazioni di tracciamento a un file specifico invece di stderr, per impostare il sovraccarico per il tracciamento delle syscalls a un overhead, per impostare un file PID per il processo di traccia, per limitare la lunghezza delle stringhe di stampa a strsize char, per eseguire comandi come username che gestisce setgid e / o setuid e per staccare su un syscall specifico.
Iniziare con strace
strace è distribuito solo come un tarball sorgente, ma può essere facilmente installato su numerose distribuzioni di Linux dai loro repository software principali. Per installarlo da fonti, è sufficiente scaricare l'ultima versione da Softoware, salvare l'archivio in una posizione a tua scelta e decomprimerlo.
Apri un'app Terminal, vai alla posizione dei file di archivio estratti (ad es. cd /home/softoware/strace-4.9), esegui ./configure && make & rsquo; comando per configurare e compilare strace, quindi eseguire l'installazione & rsquo; comando come root o sudo make install & rsquo; comando come utente privilegiato per installare strace system wide.
Novità in questa versione:
- Miglioramenti:
- Aggiunto -yy opzione per stampare il protocollo e le informazioni di indirizzo associate ai descrittori di socket.
- Esteso & quot; -e read = set & quot; e & quot; -e write = set & quot; opzioni per coprire le mms di sendmsg, recvmsg, sendmmsg e recvmmsg.
- Implementata la decodifica completa a 32 bit dei comandi ioctl (indirizzi bug Debian # 692913 e bug # 902788 di Fedora).
- Implementato il supporto dell'API PTRACE_GETREGS su ia64.
- Implementato il supporto dell'API PTRACE_GETREGS su mips.
- Implementato il supporto dell'API PTRACE_GETREGSET su s390 / s390x.
- Implementazione della decodifica delle sbrigate getrandom e seccomp.
- Implementata la decodifica completa dei set di funzionalità a 64 bit.
- Implementazione della decodifica di tutti i comandi di prctl.
- Decodifica implementata di comandi ioctl parametrizzati
- Implementazione della decodifica dei comandi evdev ioctl.
- Implementazione della decodifica dei comandi ioctl di v4l.
- Decodifica implementata dei comandi ioctl di SG_IO v4.
- Decodifica implementata dei comandi ioctl FIFREEZE / FITHAW / FITRIM.
- Decodifica implementata dei flag FALLOC_FL_ * fallocate.
- Implementata la decodifica della maschera del segnale rt_sigreturn su aarch64, x32 e x86_64.
- Decodificatore di socket avanzato per supportare socket bluetooth.
- Decodifica avanzata dei comandi ioctl non in elenco.
- Decodifica avanzata di getsockopt e setsockopt syscall.
- Decodifica avanzata di sysinfo syscall.
- Decodifica avanzata di struct cmsghdr.
- Decodifica avanzata dello stato di attesa.
- Supporto avanzato di aio su architetture non-x86 usando libaio.h esterno
- Aggiunto O_TMPFILE all'elenco dei flag riconosciuti in modalità aperta.
- Aggiornato l'elenco delle costanti del tipo di filesystem che vengono utilizzate nella decodifica delle discoteche della famiglia statfs.
- Elenchi aggiornati di costanti CAP_ *, PR_ *, PTRACE_ *, SCHED_ *, SO_ *, SOL_ *, SWAP_FLAG_ * e TFD_ *.
- Elenchi aggiornati di costanti di segnale da Linux 3.19.
- Elenchi aggiornati di costanti errno da Linux 3.19.
- Elenchi aggiornati di comandi ioctl da Linux 3.9.
- Aggiunte nuove voci di syscall per abbinare Linux 3.19.
- Correzioni di bug:
- Risolti vari errori nella mappatura tra i numeri di syscall e le informazioni associate come il numero di argomenti syscall, il nome di syscall e il decodificatore syscall.
- Risolti i problemi di quotatura in descrittori di stampa, nomi di file, nomi di interfacce di rete, membri di struct utsname, nomi di dispositivo / volume di comandi di ioctl BLK *.
- Risolto il problema della decodifica uid_t / git_t.
- Corretti i potenziali problemi di lettura fuori limite nei decodificatori getdents / getdents64.
- Corretto il potenziale troncamento di flags aperti su alcune architetture.
- Risolta la decodifica della struct ifreq.ifr_name.
- Risolto il problema con la decodifica del comando ioctl di SIOCSIFNAME.
- Risolto il problema della decodifica di RENAME_ * renameat2 flags.
- Risolto il problema della decodifica delle strutture temporali UTIME_NOW / UTIME_OMIT.
- Risolto il problema della decodifica delle sottocartelle ipc indirette su alcune architetture.
- Risolto il problema della decodifica di fanotify_mark syscall su architetture a 32 bit.
- Risolto il problema della decodifica di strutture stat a 32 bit su architetture a 64 bit.
- Risolto il problema della decodifica di struct cmsghdr a 32 bit su architetture a 64 bit.
- Risolto il problema della decodifica dell'offset preadv / pwritev a 32 bit su architetture a 64 bit.
- Risolto il problema della decodifica della maschera del segnale sigreturn / rt_sigreturn su ia64, ppc, ppc64, sparc, sparc64, mips e s390.
- Uscita puntatore istruzioni fisse (opzione -i) su architetture che supportano diverse personalità.
- Corretto comportamento di & quot; -e read = set & quot; e & quot; -e write = set & quot; quando i set di lettura e scrittura si intersecano.
- Corretto il build sui sistemi in cui struct sigaction non ha alcun membro sa_restorer.
- Corretto il build con uclibc e musl libc.
- Portabilità:
- È richiesto il kernel Linux & gt; = 2.5.46. Le versioni precedenti senza un supporto PTRACE_SETOPTIONS decente non funzioneranno.
- Su mips, è richiesto il kernel linux & gt; = 2.6.15. Le versioni precedenti senza un supporto PTRACE_GETREGS decente non funzioneranno.
- Su s390 e s390x, è richiesto il kernel linux & gt; = 2.6.27. Le versioni precedenti senza un supporto PTRACE_GETREGSET decente non funzioneranno.
Novità in nella versione 4.9:
- Modifiche nel comportamento:
- Supporto OABI disattivato sui sistemi ARM EABI per impostazione predefinita, aggiunta l'opzione --enable-arm-oabi per abilitarlo al momento della configurazione.
- I miglioramenti:
- Aggiunta l'opzione sperimentale -k per stampare la traccia dello stack dopo ogni traccia syscall.
- Aggiunta l'opzione -w per produrre statistiche sulla latenza di syscall. (indirizzi bug Debian # 457497).
- Aggiunto il supporto per l'architettura ARC.
- Aggiunto il supporto dell'API PTRACE_GETREGS su PowerPC.
- Supporto potenziato di Bionic per libc e musl libc.
- Traccia migliorata dei processi di personalità x86 su x86_64 e x32.
- Traccia migliorata dei processi di personalità ARM su AArch64.
- Rilevamento della personalità potenziato a 32/64 bit su PowerPC.
- Decodifica implementata di add_key, ioprio_get, ioprio_set, kexec_load, keyctl, renameat2 e request_key syscalls.
- Decodifica robustata di syscalls select, pselect e io_submit.
- Decodifica migliorata di delete_module, fanotify_init, fanotify_mark, fcntl, setdomainname, sethostname, setns e sync_file_range syscalls.
- Decodifica avanzata delle maschere di bit del segnale.
- Decodifica avanzata dei descrittori di file.
- Decodifica siginfo_t avanzata li>
- Decodifica PF_NETLINK migliorata.
- Costanti aggiornate di CLOCK_ * (indirizzi bug di Fedora # 1088455).
- Aggiunte nuove voci di syscall per abbinare Linux 3.16.
- Correzioni di bug:
- Aggiunto shmat e shmdt all'insieme di syscalls relative alla mappatura della memoria.
- Risolto il problema del distacco dai processi arrestati.
- Corretto la decodifica di fanotify_mark su architetture a 32 bit.
- Risolto il problema della decodifica dell'offset nelle soglie di preadv e pwritev.
- Risolta la decodifica selezionata per glibc nella modalità _FORTIFY_SOURCE.
- Risolto il problema della decodifica di epoll_ctl syscall con l'argomento EPOLL_CTL_DEL.
- Risolto build when e conflict (risolve il bug di Fedora # 993384).
- Correzioni varie nella pagina del manuale. (Risolve bug Debian # 725987).
Novità in nella versione 4.8:
- Modifiche nel comportamento:
- In caso di terminazione strace normale, quando l'output di traccia viene reindirizzato a una pipe, strace ora lo chiude e attende la conclusione del processo pipe prima dell'uscita.
- I miglioramenti:
- Traccia implementata utilizzando l'API PTRACE_SEIZE (se disponibile).
- Implementazione del rilevamento della personalità del processo basato su PTRACE_GETREGSET più affidabile su x86-64 e x32 (se disponibile).
- Aggiunto -e traccia = opzione di memoria per tracciare syscalls relative alla mappatura della memoria.
- Opzione -b documentata.
- I messaggi di stato di uscita consentiti devono essere eliminati dando due volte l'opzione -q.
- Aggiunto il supporto per l'architettura AArch64 (indirizzi bug Debian # 693074 e bug Fedora # 969858).
- Aggiunto supporto per le architetture OpenRISC 1000, Meta e Xtensa.
- Aggiunto il supporto per la personalità di tilegx per Tile.
- Supporto avanzato delle architetture NOMMU.
- Decodifica avanzata di getdents, mmap, perf_event_open, ptrace e quotactl syscalls.
- Aggiunte nuove voci di syscall per abbinare Linux 3.9.
- Rigenera la lista dei nomi ioctl comuni da Linux 3.9.
- Aggiornato l'elenco delle costanti errno.
- Elenchi aggiornati di costanti AF_ *, MADV_ *, MAP_ *, MSG_ *, MS_ *, PF_ *, PR_ *, PTRACE_O_ * e TCP_ *.
- Decodifica implementata di ioctls UBI.
- Rimosso ridondante & quot; * 32 & quot; nomi ioctl.
- Correzioni di bug:
- Corretto ERESTARTNOINTR che perdeva spazio utente su kernel antichi (indirizzi bug di Fedora # 659382).
- Risolto il parsing della stringa di rilascio del kernel (indirizzi bug Debian # 702309).
- Risolto il problema della decodifica delle * xattr syscalls (indirizzi bug di Fedora # 885233).
- Corretto il trattamento di file con numeri di inode a 64 bit per strace a 32 bit (indirizzi bug di Fedora # 912790).
- Risolti i fork di tracciamento su SPARC.
- Risolto il problema della decodifica di fadvise64, fallocate, ftruncate64, io_submit, pread, preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl e truncate64 syscalls.
- Corrette le categorie di più syscall sulla maggior parte delle architetture supportate.
- Risolto il problema della decodifica di soglie di memoria non native nativa a 32 bit recv [m] msg.
- Risolto il problema della decodifica di più syscalls a 32 bit su x32.
- Risolto il problema della decodifica degli argomenti lunghi di syscall su ARM, MIPS / o32, PowerPC, S390x e architetture Tile.
- Correzione della decodifica semtimedop su S390x.
- Risolto il problema della decodifica sram_alloc su Blackfin.
- Corretto il build quando process_vm_readv è una pugnalata.
- Risolto il problema con le versioni precedenti di libaio.h.
Novità della nuova versione nella versione 4.7:
- Questa è una versione stabile, con le solite correzioni di bug, supporto avanzato per i nuovi kernel Linux e altri miglioramenti.
Novità nella versione 4.6:
- Questa è una versione stabile, con le solite correzioni di errori, supporto avanzato per i nuovi kernel di Linux e altri miglioramenti, incluso un nuovo metodo per seguire le sony clone, fork e vfork utilizzando le strutture esplicite del kernel Linux per tracciare la creazione di thread e processi figlio.
Novità nella versione 4.5.20:
- Miglioramenti:
- Implementata la decodifica delle nuove syscalls di linux: inotify_init1, recvmmsg.
- Implementata la decodifica di base delle nuove syscalls di linux: preadv, pwritev, rt_tgsigqueueinfo, perf_event_open.
- Decodifica avanzata di syscalls aggiunte di recente su architetture non-x86 sostituendo un decodificatore nudo con elaborati parser abilitati in precedenza per x86 / x86-64.
- Implementata l'opzione -C per combinare l'output regolare e -c. (Risolve bug Debian # 466196)
- Decodifica avanzata di mbind e mremap syscalls.
- Miglioramento della decodifica delle opzioni socket SOL_PACKET.
- Elenco rigenerato di nomi ioctl da Linux 2.6.33.
- Aggiunto il supporto per l'architettura TILE.
- Correzioni di bug:
- Risolto il problema con le intestazioni del kernel Linux 2.6.32-rc5 +. (Risolve bug Debian # 560516 e bug Fedora # 539044)
- Corretto il build su mips.
- Corretto il trattamento dei sistemi Linux senza struct statfs64.
- Corretta la maschera del segnale di segnalazione con sigreturn su powerpc.
- Risolto il sovraccarico del buffer di stack potenziale nel decodificatore selezionato. (Risolve il bug di Fedora # 556678)
- Correzione msgsnd decodifica indiretta ipccall
- Decodifica corretta delle syscalls a 64 bit. (Risolve bug Debian # 570603)
- Decodifica getockopt corretta su architetture dove sizeof (long) & gt; sizeof (int). (Risolve bug Debian # 494844)
- Decodifica corretta di epoll_pwait. (Risolve bug Debian # 513014)
- Gestione corretta dei thread uccisi.
I commenti non trovato