
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 llamado “file-io.c” y 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 less
capacité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.