303 votes

Comment strace devrait être utilisé?

Un collègue m'a dit une fois que la dernière option lorsque tout a échoué de débogage sur Linux est d'utiliser strace.

J'ai essayé d'apprendre la science qui se cache derrière cet étrange outil, mais je ne suis pas un admin système du gourou et je n'ai pas vraiment obtenir des résultats.

Donc,

  • Quel est-il et que fait-il?
  • Comment et dans quels cas doit-il être utilisé?
  • Comment doit la sortie être comprise et traitée?

En bref, dans des mots simples, comment ça marche?

205voto

John Mulder Points 3716

Strace Aperçu
strace peut être vu comme un poids léger débogueur. Il permet à un programmeur / utilisateur de trouver rapidement la façon dont un programme est en interaction avec le système d'exploitation. Il le fait par le système de suivi des appels et des signaux.

Utilise
Bon pour quand vous n'avez pas le code source ou ne veulent pas être pris la peine de vraiment passer au travers.
Aussi, il est utile pour votre propre code si vous ne vous sentez pas comme l'ouverture des GDB, mais sont seulement intéressés par la compréhension de l'interaction extérieur.

Une bonne petite introduction
J'ai couru dans cette dans de strace utilisation juste de l'autre jour: strace bonjour tout le monde

69voto

bltxd Points 4408

En termes simples, strace traces de tous les appels système émis par un programme avec leurs codes de retour. Pensez à des choses comme le fichier/opérations de socket et beaucoup plus obscures.

Il est très utile si vous avez quelques connaissances de travail de C car ici les appels système avec beaucoup plus de précision stand pour la bibliothèque standard C appels.

Disons que votre programme est /usr/local/bin/toux. Utilisez simplement:

strace /usr/local/bin/cough <any required argument for cough here>

Tous les strace sortie ira vers stderr (attention, le volume de la il demande souvent pour une redirection vers un fichier). Dans les cas les plus simples, votre programme s'arrête avec un message d'erreur et vous serez en mesure de voir ce qui où les de sa dernière interactions avec le système d'exploitation dans strace de sortie.

Plus d'informations devraient être disponibles avec:

man strace

39voto

Asaf Bartov Points 930

strace les listes de tous les appels système effectués par le processus, il est appliqué. Si vous ne savez pas ce système d'appels veux dire, vous ne serez pas en mesure d'obtenir beaucoup de kilométrage de lui.

Néanmoins, si le problème implique des fichiers ou des chemins d'accès ou les valeurs de l'environnement, de l'exécution de strace sur la problématique de programme et de rediriger la sortie vers un fichier, puis grepping ce fichier pour votre fichier/chemin/env chaîne peut vous aider à voir ce que votre programme est en fait de tenter de faire, en tant que distincte de ce que vous pensiez.

19voto

terson Points 832

Strace se distingue comme un outil pour étudier les systèmes de production où vous ne pouvez pas se permettre d'exécuter ces programmes sous un débogueur. En particulier, nous avons utilisé strace dans les deux situations suivantes:

  • Programme foo semble être dans l'impasse et est devenu insensible. Ce pourrait être une cible pour gdb; cependant, nous n'avons pas toujours eu le code source ou, parfois, ont été traiter avec des scripts langues qui n'étaient pas straight-forward pour s'exécuter sous un débogueur. Dans ce cas, vous exécutez strace sur un programme déjà en marche et vous obtiendrez la liste des appels système effectués. Ceci est particulièrement utile si vous recherchez une application client/serveur ou une application qui interagit avec une base de données
  • Rechercher pourquoi un programme est lent. En particulier, nous venions de déménager vers un nouveau système de fichiers distribués et le nouveau débit du système était très lent. Vous pouvez spécifier strace avec l'option '-T' option qui va vous dire combien de temps a été consacré à chaque appel système. Ceci a permis de déterminer pourquoi le système de fichiers a été l'origine des choses à ralentir.

Pour un exemple de l'analyse à l'aide de strace voir ma réponse à cette question.

4voto

mohit Points 380

strace est un bon outil pour apprendre comment votre programme fait divers appels système (les demandes pour le noyau) et aussi les rapports de ceux qui ont échoué avec la valeur de l'erreur associée à cet échec. Tous les échecs sont des bugs. Par exemple, un code qui est en train d'essayer de rechercher un fichier peut être un ENOENT (Aucun fichier ou répertoire) l'erreur, mais que peut-être un scénario acceptable dans la logique du code.

Un bon cas d'utilisation de l'aide de strace est le débogage des conditions de course lors de création de fichier temporaire. Par exemple, un programme qui peut être la création de fichiers en ajoutant l'ID de processus (PID) de certains predecided chaîne peut faire face à des problèmes en multi-thread scénarios. [PID+TID (processus id + id de thread) ou d'un meilleur système d'appel comme mkstemp va corriger cela].

Il est également bon pour le débogage se bloque. Vous pouvez trouver cette (ma) de l'article sur strace et le débogage des accidents utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X