J'ai un certain exécutable Linux qui est appelé à partir d'une application plus importante pour effectuer certains calculs. Je souhaite modifier la façon dont les calculs sont effectués, pour cela je dois d'abord comprendre comment l'exécutable est appelé et de quelle manière les paramètres et les données sont transférés.
Donc, je voudrais surveiller les paramètres de ligne de commande, stdin et stdout si cet exécutable est appelé. Le fonctionnement normal de l'exécutable ne doit pas être perturbé.
Existe-t-il un moyen simple de le faire ?
Mise à jour :
J'ai essayé l'idée d'espace réservé du script shell pour récupérer toutes les données à l'aide du script suivant :
#!/bin/bash
export LOGFILE=/tmp/logname
echo `env` > $LOGFILE-env
echo "[email protected]" >> $LOGFILE-arguments
tee -a $LOGFILE-stdin | /path/to/real/executable 2>&1 | tee -a $LOGFILE-stdout
Cela fonctionne bien pour l'entrée de test, mais il se bloque simplement s'il est appelé pour de vrai. Il se passe probablement encore plus que je ne le pensais.
Réponse acceptée :
L'option 1 serait de modifier le code source de l'application appelante et d'insérer tee
dans le pipeline de sortie pour obtenir une copie de la sortie pour examen à ce stade.
L'option 2 serait d'écrire un script wrapper autour de l'exécutable en question. Un script rapide qui transmet stdin et des arguments à la vraie application, puis envoie la sortie à un emplacement que vous pouvez examiner et la recrache également de la même manière que l'application ne devrait avoir que quelques lignes à préparer. Placez-le dans un endroit spécial et ajoutez cet emplacement devant votre variable PATH, puis exécutez votre application.
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output