Dépannage avec strace : guide de débogage sous Linux

Découvrez comment utiliser strace pour diagnostiquer et résoudre les problèmes d’applications dans les environnements Linux. Cet outil puissant fournit des informations détaillées sur les appels système, aidant les développeurs, les administrateurs système et les ingénieurs support à résoudre efficacement les goulots d’étranglement, les plantages et les problèmes réseau.


Qu’est-ce que strace ?

strace est un utilitaire de diagnostic, de débogage et pédagogique pour Linux. Il intercepte et enregistre les appels système effectués par un processus en cours d’exécution ainsi que les signaux reçus par le processus. En capturant ces informations, strace offre des informations précieuses sur la façon dont les logiciels interagissent avec le système d’exploitation, ce qui en fait un outil indispensable pour :

  • Débogage des plantages d’applications
  • Identification des fichiers manquants ou des problèmes d’autorisations
  • Diagnostic des problèmes réseau
  • Optimisation des goulots d’étranglement

Pourquoi utiliser strace ?

Comprendre comment un programme interagit avec le système est essentiel pour diagnostiquer les problèmes. strace fournit des informations détaillées sur les appels système, tels que :

  • Opérations sur les fichiers
  • Communications réseau
  • Gestion des processus

Ces informations aident à localiser les défaillances, les ralentissements ou les comportements inattendus, ce qui permet une résolution plus rapide des problèmes.


Prise en main de strace

L’utilisation de strace est simple. La syntaxe de base est la suivante :

strace [options] command [arguments]

Exemple :

Pour tracer la commande ls  :

strace ls

Cela produit une liste des appels système effectués par ls, ce qui vous aide à comprendre son comportement.


Options et indicateurs clés

Voici les options strace couramment utilisées :

  • -o filename : Écrit la sortie de la trace dans un fichier.
    Exemple :strace -o trace_output.txt ls
  • -p pid : S’attache à un processus avec le PID indiqué et commence le traçage.
    Exemple :strace -p 1234
  • -e trace=set : Filtre les types d’appels système à tracer.
    Exemple :strace -e trace=open,close ls
  • -r : Affiche le temps écoulé entre les appels système successifs.
    Exemple :strace -r ls
  • -T : Affiche le temps passé dans chaque appel système.
    Exemple :strace -T ls

Paramètres courants expliqués

Vous trouverez ci-dessous une explication détaillée de certains paramètres strace couramment utilisés :

1. -r (Temps relatif)

  • Objectif : Mesure et affiche le temps écoulé entre les appels système successifs.
  • Cas d’utilisation : Aide à repérer les retards ou les goulots d’étranglement dans l’exécution d’un programme.
  • Exemple :strace -r ls La sortie comprendra le temps écoulé entre chaque appel système, ce qui vous permettra d’analyser les problèmes de performance.

2. -e (Filtrage des événements)

  • Objectif : Filtre les types d’appels système ou de signaux à tracer, ce qui réduit le volume de sortie et se concentre sur des événements spécifiques.
  • Cas d’utilisation : Utilisez -e pour tracer uniquement les appels système pertinents, ce qui facilite l’analyse de la sortie.
  • Exemple :strace -e trace=open,read,write ls La sortie ne montrera que les appels système liés à l’ouverture, à la lecture et à l’écriture de fichiers.

3. -o (Sortie vers un fichier)

  • Objectif : Enregistre la sortie de la trace dans un fichier au lieu de l’afficher dans le terminal.
  • Cas d’utilisation : Utile pour analyser des sorties volumineuses ou partager des informations de débogage avec d’autres personnes.
  • Exemple :strace -o trace_output.txt ls

4. -p (Attacher à un processus par PID)

  • Objectif : Attache strace à un processus déjà en cours d’exécution, identifié par son PID.
  • Cas d’utilisation : Utilisez cette option lorsque vous souhaitez déboguer une application en cours d’exécution sans la redémarrer.
  • Exemple :strace -p 1234

5. -T (Informations de synchronisation)

  • Objectif : Affiche le temps passé dans chaque appel système.
  • Cas d’utilisation : Aide à repérer les appels système qui prennent trop de temps et qui pourraient nécessiter une optimisation.
  • Exemple :strace -T ls

6. -c (Statistiques récapitulatives)

  • Objectif : Affiche un résumé des appels système à la fin de la trace, y compris le nombre d’appels, le temps passé et les erreurs.
  • Cas d’utilisation : Idéal pour obtenir un aperçu de l’utilisation des appels système sans analyser l’intégralité de la sortie.
  • Exemple :strace -c ls

7. -s (Taille de chaîne)

  • Objectif : Spécifie la taille maximale des chaînes à afficher dans la sortie. Par défaut, strace tronque les chaînes de plus de 32 caractères.
  • Cas d’utilisation : Utilisez cette option lors du débogage d’applications qui transmettent de grandes chaînes aux appels système.
  • Exemple :strace -s 128 ls La sortie comprendra des chaînes allant jusqu’à 128 caractères.

8. -f (Suivre les forks)

  • Objectif : Trace les processus enfants créés par fork() ou clone().
  • Cas d’utilisation : Utile pour déboguer des applications multiprocessus ou des programmes qui génèrent des processus enfants.
  • Exemple :strace -f ls

Usages pratiques de strace

1. Débogage des plantages d’applications

Si une application plante, utilisez strace pour identifier le dernier appel système effectué avant le plantage.
Exemple :

strace -o crash_trace.txt ./my_app

Examinez la sortie dans crash_trace.txt pour déterminer la cause du plantage.


2. Identification des fichiers manquants ou des problèmes d’autorisations

Lorsqu’un programme ne parvient pas à ouvrir un fichier ou rencontre un problème d’autorisation, strace aide à identifier le problème.
Exemple :

strace -e trace=open ./my_app

Recherchez les erreurs telles que ENOENT (fichier introuvable) ou EACCES (autorisation refusée) dans la sortie.


3. Dépannage réseau

Pour diagnostiquer les problèmes réseau, tracez les appels système liés au réseau.
Exemple :

strace -e trace=network curl http://example.com

Cela peut révéler des problèmes de résolution DNS, de connectivité ou des erreurs de protocole.


4. Optimisation des performances

Utilisez strace pour trouver les goulots d’étranglement en identifiant les appels système lents ou les appels fréquents qui pourraient être optimisés.
Exemple :

strace -T -o perf_trace.txt ./my_app

L’option -T ajoute des informations de synchronisation à chaque appel système, ce qui aide à localiser les retards.


Bonnes pratiques d’utilisation de strace

  • Limiter la portée de la trace : Utilisez les options de filtrage pour réduire les données capturées, ce qui facilite l’analyse.
  • Utilisation dans des environnements hors production : strace peut être gourmand en ressources, il est donc préférable de l’utiliser dans des environnements de développement ou de préproduction.
  • Combiner avec d’autres outils : Intégrez strace avec d’autres outils de débogage pour une analyse plus complète.

Conclusion

strace est un outil polyvalent et puissant pour le dépannage et le débogage sous Linux. En fournissant une vue détaillée des appels système, il aide à découvrir les causes profondes des problèmes d’applications, ce qui conduit à une résolution des problèmes et à une optimisation du système plus efficaces.

Laisser un commentaire