LINUX

Come tenere traccia dell’esecuzione del programma utilizzando il comando strace di Linux

La maggior parte delle volte, quando i programmatori e gli amministratori di sistema tentano di eseguire il debug o di risolvere i problemi con i loro binari e pacchetti compilati, a un certo punto incontrerai errori, arresti anomali del programma e stato di uscita che senza dubbio distruggeranno il cervello se puoi. Non riesco a trovare la causa del problema.

In questo tutorial, apprendiamo il comando strace in Linux con esempi di utilizzo.

Il comando strace Linux

Strace è uno strumento diagnostico e di debug nei sistemi Linux che viene utilizzato per registrare e intercettare i nomi delle chiamate di sistema chiamate da un processo in esecuzione e i segnali che vengono ricevuti da detto processo in esecuzione. Può anche diventare un utile strumento di isolamento dei bug.

Strace come potente strumento viene utilizzato principalmente per la risoluzione dei problemi, il debug e l’analisi di come un’applicazione, un programma o un binario interagisce con il tuo sistema Linux. Quindi, se hai problemi con il tuo programma o binario compilato, puoi usare strace per verificare dove viene rilevato il problema e quale specifica chiamata di sistema è mirata.

Il comando strace può essere utilizzato anche da utenti non root nel suo utilizzo di base. Questa versatilità ti dà la possibilità nello spazio utente di controllare eseguibili non privilegiati che devono solo essere rivisti senza influire sulle modifiche a livello di sistema.

Sintassi:

strace [-ACdffhikqqrtttTvVwxxyyzZ] [-I n] [-b execve]

              [-e expr]... [-O overhead] [-S sortby] [-U columns]

              [-a column] [-o file] [-s strsize] [-X format]

              [-P path]... [-p pid]... [--seccomp-bpf] { -p pid | [-DDD]

              [-E var[=val]]... [-u username] command [args] }

Installazione

Nelle distribuzioni Linux più recenti, strace è già preinstallato. Tuttavia, se scopri che non è stato ancora installato, puoi eseguire i seguenti comandi in base alle tue distribuzioni Linux:

Per Debian/Ubuntu

sudo apt install strace

Per Federa

sudo dnf install strace

Per Cappello Rosso / Flusso CentOS

sudo yum install strace

Per ArcoLinux

sudo pacman install strace

opzioni del comando strace

Alcune utili opzioni del comando strace:

scelta Descrizione
-UN COLONNA di allineamento per la stampa dei risultati delle chiamate di sistema (predefinito 40)
– c Contare il tempo, le chiamate e gli errori per ogni chiamata di sistema e il riepilogo del report
-C come -c, ma stampa anche un normale output
d abilita l’output di debug all’errore standard (stderr)
d eseguire il processo di tracciamento come nipote distaccato, non come genitore
Opzioni -e expr: un’espressione qualificante: option=[!]tutto o opzione=[!]onda1[,val2]…trace, abbrev, verbose, raw, signal symbol, read, write, error, inject, kvm, desc (file descriptor)
– f Segui le forchette
-ff seguire i fork con l’output in file separati
loro stampa il puntatore all’istruzione al momento della chiamata di sistema
-IO Interruttori
-un invia l’output della traccia a FILE invece dell’errore standard (stderr)
t stampare il timestamp in assoluto
T il tempo di stampa impiegato in ciascuna chiamata di sistema
-w riepiloga la latenza delle chiamate di sistema (l’impostazione predefinita è l’ora del sistema)

Per saperne di più, effettua l’ordine strace -h per elencare tutte le opzioni possibili.

Come funziona il comando strace

Strace si basa principalmente sulle chiamate di sistema ptrace per fornire un output significativo nel suo senso di debugging e debugging. ptrace viene utilizzato principalmente per ispezionare cosa stanno facendo gli altri programmi dopo uno specifico set di istruzioni. In termini semplici, strace chiamerà e segnalerà ptrace e si collegherà al programma analizzato.

Come usare il comando strace

Dimostrando come utilizzare il comando strace Linux, di seguito sono riportati alcuni degli esempi che è possibile verificare per valutare ed esaminare le chiamate di processo di alcuni comuni comandi Linux.

Per impostazione predefinita, il nome, il valore restituito, i parametri e gli argomenti di ogni chiamata di sistema vengono stampati in errore standard o possono essere inviati a un file specificando l’opzione -o.

1. Tieni traccia delle chiamate di sistema

Per eseguire una traccia di base di un codice sorgente o di un nome di chiamata di sistema di un eseguibile binario, esaminiamo il comando pwd specificato. Corsa:

strace pwd

L’output conterrà le seguenti informazioni:

strace per impostazione predefinita

Come visto sopra, strace traccerà il comando specificato a partire dalla posizione del comando pwd fino all’output di pwd, che sta stampando la directory di lavoro. Un valore pari a zero (0) significa che il codice aveva uno stato di uscita senza errori.

Un uso di strace (oltre alla risoluzione dei problemi) è che puoi scoprire quali file di configurazione vengono letti da un programma.

Per esempio:

strace php 2>&1 | grep php.ini

2. Tenere traccia dell’applicazione in esecuzione utilizzando PID

Quando un particolare programma o codice sorgente è già stato avviato e l’output richiede molto più tempo del previsto, puoi anche allegare strace a un’applicazione già in esecuzione. Basta determinare l’ID di quel processo. Puoi farlo eseguendo il comando dato:

sudo strace -p <PID>

Questo comando visualizzerà continuamente le chiamate di sistema effettuate dal processo. Puoi premere CTRL+C per fermarlo.

ID processo Strace

Alcuni processi eseguiti da altri programmi possono essere esaminati solo con l’accesso dell’utente root. Come mostrato sopra, puoi esaminare il codice di uscita per ogni successiva chiamata di sistema

3. Segui i bivi

Puoi anche tracciare le forcelle di un particolare processo. Per fare ciò, emettere il comando dato:

strace -f -p <PID>
forchetta forchetta

Nell’esempio sopra, tracciamo i fork del comando htop con PID 4483. Viene mostrato anche il codice di uscita per ogni successiva chiamata di sistema

4. Filtrare chiamate di sistema specifiche

È possibile filtrare determinate chiamate di sistema semplicemente aggiungendo la variabile -e. È possibile filtrare le chiamate di sistema grezze, leggere il segnale o scrivere in base alla documentazione strace. Eseguire strace nel seguente esempio:

strace -e read htop
filtro antistrappo

Nell’esempio sopra, abbiamo filtrato i nomi delle chiamate di sistema lette su htop.

Puoi combinare diversi valori assegnati alla variabile -e. Un altro esempio sopra mostra le chiamate di sistema di lettura e scrittura dal comando timedatectl.

Strace lettura/scrittura

In ogni caso, il valore restituito dovrebbe essere sempre zero senza errori

Per visualizzare i file aperti da un processo specifico come SSH, eseguire il seguente comando:

strace -f -e open /usr/sbin/sshd 2>&1 | grep ssh

Per tracciare le chiamate di sistema relative alla rete, eseguire il seguente comando:

strace -e network nc -v -n 127.0.0.1 80

5. Stampare il tempo speso per le chiamate di sistema

Per conoscere il tempo impiegato dalle chiamate di sistema per un particolare processo, segui questa sintassi e inseriscila nella riga di comando

strace -r pwd
la durata fa schifo

La prima colonna indica il tempo impiegato dalle chiamate di sistema prima di passare alla successiva.

6. Mostra timestamp

È possibile visualizzare il timestamp seguendo la sintassi:

strace -tt <executable>

Nell’esempio seguente, l’output visualizza una parte del comando timedatectl, con la prima colonna che mostra il timestamp per la stampa.

timestamp strace

Per stampare l’ora dell’orologio da parete di ciascuna chiamata di sistema, è sufficiente eseguire quanto segue sulla riga di comando:

strace -t pwd
orologio da parete mania

Infine, per visualizzare la differenza di orario, eseguire quanto segue nella riga di comando:

strace -T pwd
perdere la differenza di fuso orario

La differenza di orario verrà visualizzata nell’ultima colonna dell’output strace.

7. Visualizzare il puntatore di istruzione della chiamata di sistema

Per visualizzare il flag di istruzione di un nome di chiamata di sistema, specificare il flag -i sulla riga di comando. Esempio:

strace -i w
puntatore strace

In questo esempio, viene stampato il puntatore di istruzione di un nome di chiamata di sistema.

8. Generare un rapporto sulle chiamate di sistema

Un modo utile e semplice per riassumere strace è semplicemente visualizzare il rapporto sulle chiamate di sistema. Segui la sintassi ed esegui strace:

strace -c <executable>
la traccia del rapporto

9. Tieni traccia delle chiamate di sistema in base a una determinata condizione

È anche possibile riprovare in base a una specifica chiamata di sistema sopprimendo gli output indesiderati. Includere il flag -q durante l’utilizzo del flag -e per acquisire condizioni di competizione

strace -q -e memory pwd
condizione povera

Il valore restituito dovrebbe sempre mostrare uno zero per nessun errore.

10. Stampa Debug Output di trace

Per visualizzare e stampare le informazioni di debug, applica il flag -d. Eseguire il seguente esempio:

strace -d pwd
debug della traccia strace

In questo esempio, l’output di debug viene visualizzato come errore standard o stderr in ogni fase della chiamata di sistema.

11. Inviare la traccia a un file

In quest’ultimo esempio, puoi anche salvare gli output di strace in un file per una successiva elaborazione e valutazione. Per fare ciò, segui la sintassi:

strace -o <filename> <executable>
strace punta a tale file

In questo esempio, l’output è stato salvato nel file pwd.log. Il valore restituito e altri parametri vengono registrati nel processo.

Conclusione

Il sistema Linux ha molti utili strumenti di debug per il debug e il debug di codice e binari compilati. Strace Process Monitor è solo uno dei tanti che ha dimostrato molte funzionalità interessanti e coinvolgenti che possono rendere la tua vita di programmatore più facile e più preziosa.

Poiché le chiamate di sistema e i segnali sono eventi che si verificano nell’interfaccia utente o nel kernel di Linux, strace è utile durante il debug. Puoi sempre visitare il funzionario strace pagina di manuale per saperne di più sull’ordinazione.

Sfoglia il sito all-in-one di Comandi Linux per più apprendimento.

Related Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Back to top button
Close