Le traçage d'un programme informatique n'est pas réservé qu'à ceux qui ont le code source, ils peuvent le lire et savent utiliser un débogueur. Tout utilisateur Linux peut tracer un exécutable avec strace. Trouver comment!
Qu'est que c'est strass?
strace est un utilitaire Linux qui vous permet de tracer les appels système effectués par une application donnée. Il captera également des signaux et produira une sortie détaillée de toutes les informations qu'il observe..
Une nouvelle personne à ramper et ramper, en général, vous pourriez demander pourquoi c'est utile. Un ingénieur informatique professionnel pourrait demander quelle quantité d'informations Strace peut vraiment capturer, surtout si vous savez combien d'informations un débogueur comme GDB peut voir.
Si vous êtes intéressé par le débogage de codes et de programmes informatiques, voir notre article Débogage avec GDB: introduction.
Il y a de bonnes nouvelles dans les deux cas! Le suivi de tous les appels et signaux système fournit une image complète du fonctionnement d'un programme, et c'est un excellent outil de dépannage et même de débogage. En même temps, fonctionne tout au long de l'exécution (comme procédure d'emballage), mais il peut être facilement tracé dans un fichier journal et offre un aperçu facile à digérer des actions d'un programme.
Comparaison avec GDB, qui est aussi une procédure d'emballage, les choses sont sensiblement différentes. Par exemple, et GDB, on pourrait tracer un programme pas à pas (par exemple, une ligne de code à la fois ou un bloc logique de code, ou en utilisant des points d'arrêt dans le code). Malgré cela, ces étapes sont effectuées pendant Durée, tandis que strace exécute simplement le programme dans son ensemble jusqu'à ce qu'une erreur se produise ou jusqu'à ce qu'il se termine.
L'ingénieur ou l'utilisateur peut aller analyser l'ensemble du dossier (basé sur du texte), rechercher des chaînes intéressantes, etc. En même temps, GDB permettrait de voir les signaux et les appels au système en plus, même si sa configuration et son analyse sont beaucoup plus complexes qu'avec strace
.
Contraste, vous pouvez simplement exécuter le programme dans strace
(En d'autres termes strace some_program
), et même si c'est à peu près la même chose que GDB, le fonctionnement diffère sensiblement, comme décrit précédemment.
Concernant la quantité d'informations que l'on peut voir dans une trace, il est bon de prendre du recul et de se rappeler d'où viennent la plupart des problèmes informatiques: Disque plein, mémoire épuisée, aucun fichier trouvé, mauvaise touche, etc.
Surtout dans les zones d'accès au disque, strace
brille vraiment. Comment il enregistre tous les appels système, chaque accès disque est très visible dans le registre. De nouveau, peut rechercher des chaînes de texte et des noms de fichiers pertinents, même en gardant à l'esprit que, parfois, les chaînes peuvent être réduites en longueur, donc seule une sortie partielle peut être visible.
En résumé, si on devait se qualifier strace
comme outil de débogage et / ou dépannage et attribuez-lui une place dans une boîte à outils utilisateur Linux plus récente ou plus compétente, ensuite, dans les deux cas, la solution est à peu près au milieu, même si cela penche un peu plus vers le dépannage que le débogage. installons strace
Prochain.
EN RELATION: Comment fonctionnent les portes logiques: OU, ET, OU exclusif, NI, NAND, XNOR et NON
installation strass
Installer strass sur votre distribution Linux basée sur Debian / Apte (comme Ubuntu et Mint), exécutez la commande suivante dans votre terminal:
sudo apt install strace
Installer strass sur votre distribution Linux basée sur RedHat / Miam (comme RHEL, Centos et Fedora), exécutez la commande suivante dans votre terminal:
sudo yum install strace
À l'aide de strass
Après l'installation strace
, c'est assez simple pour commencer. Pouvons, par exemple, tracer le linux sleep
commander / utilitaire:
sommeil 1
Immédiatement, le résultat prouve la déclaration ci-dessus. Il existe une mine d'informations sur toutes les actions entreprises par le (très) Facile sleep 1
commander, Quoi, après tout, juste des actions qui dorment une seule seconde.
Regardons quelques choses que nous pouvons observer tout de suite:
accès("/etc/ld.so.preload", R_OK) = -1 ENOENT (Aucun fichier ou répertoire de ce nom)
Nous pouvons voir que peu de temps après avoir commencé, le programme a essayé d'entrer (Sur le disque) déposer /etc/ld.so.preload
. Nous pouvons également voir que cela a échoué (-1 status
), puisque le fichier n'a pas été trouvé (ENOENT
) avec message d'erreur descriptif No such file or directory
.
Seule cette ligne de départ unique pourrait conduire à une enquête plus approfondie. Par exemple, nous pouvons scanner notre moteur de recherche préféré à la recherche de ce que le fichier /etc/ld.so.preload
il est / fait et que se passe-t-il lorsqu'un programme ne peut pas le trouver, ainsi que comment nous pouvons l'installer.
Comme tu peux le voir, si je lance un logiciel / programme plus complexe en strace
, il est possible qu'il découvre qu'il essaie d'entrer un fichier, par exemple, un fichier partagé .so
bibliothèque et je ne la trouve pas. Facilement analysé et probablement facilement corrigé grâce à strace
.
Ensuite, nous voyons le conf.d
cache binaire qui s'ouvre avec succès en tant que lecture seulement (O_RDONLY
), avec le drapeau close-on-exec (utilisé dans les programmes multithread pour éviter les conditions de concurrence) O_CLOEXEC
ensemble de drapeaux:
Ouvert(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
Même si vous ne savez pas ce que signifie chaque élément, une simple recherche en ligne fournira rapidement des informations sur chaque terme ou mot spécifique, qui vous aidera à comprendre les informations présentées et ce qui se passe.
Cette ligne vers la fin présente également un intérêt particulier.:
+++ sorti avec 0 +++
Cela indique que le programme s'est terminé avec succès avec le code de sortie. 0
. Un code de sortie de 0 indique généralement l'exécution réussie et l'arrêt des programmes Linux.
Comme vous pouvez le voir dans les exemples ci-dessus, il est facile de voir ce que fait un programme en utilisant strace
. Vous pouvez analyser chaque ligne et même chaque mot dans chaque ligne et, souvent, il faut un moteur de recherche pour faire la lumière. Malgré cela, même jeter un œil à la sortie d'un programme qui plante peut être suffisant pour trouver la cause exacte et la corriger., et surtout quand, par exemple, un fichier requis est manquant, etc.
EN RELATION: Impact des niveaux d'exécution Linux sur les services en cours d'exécution
Surveillance du processus secondaire
Lorsque vous utilisez strace
, parfois il semblera que strace
il ne suit pas correctement tous les appels système du programme, etc. Cela peut être simplement dû au fait que le programme tracé a démarré / lancé plusieurs processus enfants, par exemple, lors du branchement de processus enfants.
Il est simple d'inclure ces processus enfants dans la capture de strace: il suffit d'ajouter le -f
option de ligne de commande (En d'autres termes, strace -f your_program
), et aussi tous les appels au système seront tracés, etc., de tous les processus enfants.
Fin
Dans ce billet, nous avons discuté du strace
outil, qui peut être utilisé pour suivre n'importe quel programme ou application s'exécutant sur un ordinateur basé sur Linux.
Après avoir installé l'outil, nous pouvons démarrer le programme simplement et directement sous strace
et profitez du haut niveau d'informations de dépannage et de débogage qui strace
l'emballage nous présentera.