Comment utiliser strace pour surveiller les appels système Linux

Contenu

Une fenêtre de terminal stylisée sur un ordinateur portable.

Les programmes Linux demandent au noyau de faire certaines choses pour eux. Les strace La commande révèle ces appels système. Vous pouvez les utiliser pour comprendre comment fonctionnent les programmes et pourquoi, parfois, ils ne le font pas.

Le noyau et les appels système

Peu importe à quel point ils sont intelligents, les programmes informatiques ne peuvent pas tout faire par eux-mêmes. Ils doivent faire des demandes pour que certaines fonctions soient exécutées. Ces requêtes vont au noyau Linux. En général, il existe une bibliothèque ou une autre interface logicielle que le programme appelle, puis la bibliothèque fait la demande appropriée, appel système d'appel, al noyau.

Être capable de voir les appels système qu'un programme a effectués et quelles ont été les réponses peut vous aider à comprendre le fonctionnement interne des programmes qui vous intéressent ou que vous avez écrits.. Ceci est Quoi strace il le fait. Peut aider à résoudre les problèmes et à trouver les goulots d'étranglement.

Ce n'est pas la même chose que déboguer une application avec un outil comme gdb . Un programme de débogage vous permet d'étudier le fonctionnement interne d'un programme pendant son exécution. Vous permet de parcourir la logique de votre programme et d'inspecter la mémoire et les valeurs des variables. En comparaison, Quoi strace ce qu'il fait, c'est capturer les informations de l'appel système pendant l'exécution du programme. Lorsque le programme suivi se termine, strace répertorie les informations d'appel système dans la fenêtre du terminal.

Les appels système fournissent toutes sortes de fonctions de bas niveau, en tant qu'actions de lecture et d'écriture sur les fichiers, élimination du processus, etc. Il y a une liste de centaines d'appels système dans le página de manual de syscalls.

EN RELATION: Depuración con GDB: introduction

Instalación de strace

Et strace aún no está instalado en su computadora, puede instalarlo muy fácilmente.

Sous Ubuntu, utilise cette commande:

sudo apt install strace

Dans Fedora, écrire cette commande:

sudo dnf install strace

à Manjaro, la commande est:

sudo pacman -Sy strace

Primeros pasos con strace

Usaremos un pequeño programa para demostrar strace. No hace mucho: abre un archivo y escribe una línea de texto en él, y no tiene ningún error al verificarlo. Es solo un truco rápido para que tengamos algo con qué utilizar strace.

#comprendre <stdio.h>

int main(int argc, char argv[]) { 

  // file handle 
  FILE *fileGeek;

  // open a file called "strace_demo.txt", or create it 
  fileGeek = fopen("strace_demo.txt", "w");

  // write some text to the file 
  fprintf(fileGeek, "Write this to the file" );

  // close the file 
  fclose(fileGeek);

  // exit from program 
  return (0); 

} // fin du principal

Guardamos esto en un archivo llamadofile-io.cy lo compilamos con gcc dans un exécutable appelé stex, nommé pour “S tRaza exlarge.”

gcc -o stex fichier-io.c

nous appellerons strace depuis la ligne de commande et transmettez le nom de notre nouvel exécutable comme procédure que nous voulons suivre. Nous pourrions facilement tracer l'une des commandes Linux ou tout autre exécutable binaire. Nous utilisons notre petit programme pour deux raisons.

La première raison est que strace c'est verbeux. Il peut y avoir plusieurs résultats. C'est super quand vous utilisez strace énervé, mais ça peut être écrasant au début. Il y a limité strace départ pour notre petit programme. La deuxième raison est que notre programme a des fonctionnalités limitées et que le code source est court et simple.. Cela facilite l'identification des sections de la sortie faisant référence à différentes parties du fonctionnement interne du programme..

strace ./stex

On voit clairement le write appel système envoyant le texte “Écrivez ceci dans le fichier” à notre dossier ouvert et au exit_group appel système. Cela met fin à tous les threads de l'application et envoie une valeur de retour au shell.

Filtrer la sortie

Même avec notre simple programme de démonstration, il y a assez de sortie. Nous pouvons utiliser le -e Option (expression). On va passer le nom de l'appel système que l'on veut voir.

strace -e écriture ./stex

Vous pouvez signaler plusieurs appels système en les ajoutant sous forme de liste séparée par des virgules. Ne pas inclure d'espace blanc dans la liste des appels système.

strace -e fermer,écrire ./stex

Envoyer la sortie dans un fichier

L'avantage de filtrer la sortie est aussi le problème de filtrer la sortie. Tu vois ce que tu as demandé à voir, mais tu ne vois rien d'autre. Et certains de ces autres résultats peuvent vous être plus utiles que les choses que vous avez demandé à voir..

Parfois, il est plus pratique de tout capturer et de rechercher et de faire défiler l'ensemble des résultats. De cette manière, n'exclura accidentellement rien d'important. Les -o L'option (Sortir) vous permet d'envoyer la sortie d'un strace session dans un fichier texte.

strace -o trace-output.txt ./stex

Ensuite, vous pouvez utiliser le less commande pour faire défiler la liste et rechercher les appels système, ou toute autre chose, de nom.

moins trace-output.txt

Vous pouvez maintenant utiliser tous lesscapacités de recherche pour enquêter sur la sortie.

EN RELATION: Comment utiliser la commande less sous Linux

Ajouter des horodatages

Vous pouvez ajouter plusieurs horodatages différents à la sortie. Les -r L'option (horodatages relatifs) ajoute des horodatages indiquant la différence de temps entre le début de chaque appel système successif. Notez que ces valeurs de temps incluront le temps passé sur l'appel système précédent et tout ce que le programme faisait avant le prochain appel système..

strace -r ./stex

Les horodatages sont affichés au début de chaque ligne de départ.

Pour voir le temps passé sur chaque appel système, utiliser el -T (heures d'appel système) option. Cela montre la durée écoulée dans chaque appel système.

strace -T ./stex

Les durées sont affichées à la fin de chaque apparition d'appel système.

Pour voir l'heure à laquelle chaque appel système a été appelé, Utilisez le -tt (horodatages absolus). Cela montre l'heure de “horloge murale”, avec une résolution en microsecondes.

strace -tt ./stex

Les heures sont indiquées au début de chaque ligne.

Suivi d'une procédure en cours

Si la procédure que vous souhaitez tracer est déjà en cours, peut encore attacher strace ce. Pour le faire, vous devez connaître l'identifiant de la procédure. Vous pouvez utiliser ps avec grep pour trouver ça. Nous avons Firefox en cours d'exécution. Pour connaître l'identifiant du firefox traiter, on peut utiliser ps et le canaliser à travers grep.

ps -e | grep firefox

Nous pouvons voir que l'ID de procédure est 8483. Nous utiliserons le -p (Identifiant de la procédure) possibilité de dire strace quelle procédure joindre à. Veuillez noter que vous devrez utiliser sudo :

sudo strace -p 8483

Vous verrez une notification qui strace a été joint à la procédure, puis les appels de trace système s'afficheront dans la fenêtre du terminal comme d'habitude.

Créer un rapport

Les -c (juste un résumé) l'option provoque strace imprimer un rapport. Génère un tableau pour obtenir des informations sur les appels système effectués par le programme suivi.

strace -c ./stex

Les colonnes sont:

  • % la météo: Le pourcentage de temps d'exécution qui a été consacré à chaque appel système.
  • secondes: Le temps total en secondes et microsecondes pour chaque appel système.
  • usecs / appel: Le temps moyen en microsecondes passé sur chaque appel système.
  • appels: Le nombre de fois que chaque appel système a été exécuté.
  • erreurs: Le nombre d'échecs pour chaque appel système.
  • appel système: Le nom de l'appel système.

Ces valeurs afficheront des zéros pour les programmes triviaux qui s'exécutent et se terminent rapidement. Les valeurs du monde réel sont affichées pour les programmes qui font quelque chose de plus significatif que notre application de démonstration.

Des informations approfondies, facilement

Les strace La sortie peut vous montrer quels appels système sont effectués, lesquelles sont effectuées à plusieurs reprises et combien de temps d'exécution est passé à l'intérieur du code côté noyau. C'est une excellente information. Souvent, lorsque vous essayez de comprendre ce qui se passe dans votre code, il est facile d'oublier que votre binaire interagit presque sans arrêt avec le noyau pour exécuter bon nombre de ses fonctions.

Grâce à l'utilisation strace, tu vois toute l'image.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.