3 votes

Comment passer une commande stdout à lldb debugged file stdin via pipe

Je veux lancer un exécutable, rediriger son stdout vers le via pipe de mon programme, et déboguer mon programme avec LLDB. Donc, par exemple :

cat my_file | ./main

puis déboguer ./main. Je suis au courant de l'existence de process launch -i my_file mais ce n'est pas exactement ce que je veux faire - je veux que la sortie vienne du stdout de cat (cela pourrait être n'importe quel autre exécutable avec lequel -i n'obtiendrait pas un comportement similaire). Je ne vois pas d'options pertinentes sous help process launch .

2voto

Jim Ingham Points 12823

Cette option n'est pas prise en charge par lldb. Vous pouvez obtenir presque le même effet en exécutant :

(lldb) process attach -w -n main

puis allez à la ligne de commande et exécutez la commande cat | ./main commande.

lldb s'attachera au processus appelé main lors de sa création. lldb le fait en interrogeant la table des processus, de sorte qu'il ne s'arrêtera pas au tout début de la vie du programme. Cependant, il l'attrape généralement très tôt (souvent dans la phase de chargement de dyld), donc cela peut ne pas être un problème pour vous. Si c'est le cas - et que main est un programme que vous pouvez reconstruire, une solution est de mettre quelque chose comme ceci au début de main :

int go_on = 1
while (go_on) { sleep(1); }

Ensuite, lorsque vous vous attachez, faites-le :

(lldb) expr go_on = 0
(lldb) continue

1voto

tsiolkas Points 11

Pour ceux qui cherchent encore à passer à lldb des sorties de commandes shell en tant qu'arguments.

Une solution que vous pouvez essayer est de créer une variable d'environnement avec le résultat de la commande et de la passer comme argument à lldb. Lorsque lldb s'exécute, il met en place l'option target.run-args provenant de la variable d'environnement.

Dans votre exemple, vous feriez quelque chose de ce genre.

ARG=`cat mon_fichier`

(echo $ARG pour valider que le résultat est bien celui que vous souhaitez)

lldb -- main $ARG

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