Question

Je suis en train d'écrire des tests qui interagissent avec GDB mais ai du mal à capturer la sortie. Je voudrais un fichier journal à générer qui ressemble à ce qui aurait été vu dans un terminal si le test avait été exécuté manuellement. GDB se révèle être très têtu quand il vient de capturer sa sortie cependant.

Je suis capable d'écrire des scripts Attendez-vous qui sont capables d'interagir avec GDB et dont la sortie peut être redirigée vers un fichier journal, mais je ne veux pas écrire mes tests dans TCL. J'espère utiliser Groovy, qui est compatible avec Java. Pour une raison quelconque avec Perl attendre et ExpectJ la sortie du programme va toujours vers le terminal et ne peuvent être redirigés vers un fichier.

J'ai essayé de commencer un processus GDB de Java en utilisant ProcessBuilder et il fonctionne la plupart du temps, mais la sortie des états d'impression apparaissent jamais sur stdout et ne peut pas être capturé. Je pensais que si Attendez-vous à des œuvres alors j'attendre de lancer Java et avoir interagir avec GDB mais dans ce cas la majeure partie de la sortie du programme est perdu, ne jamais apparaître dans le stdout du processus créé.

Alors, ma question est, comment puis-je écrire un test Groovy (Java serait bien aussi) qui interagit avec GDB et peut capturer toute la production?

Pseudo-code:

process = "gdb -q".execute()
waitForPrompt()
send("file exec")
waitForPrompt()
send("run")
send("quit")

fichier journal:

(gdb) file exec
Reading symbols from exec...done.
(gdb) run
Starting program: exec
<... output ...>

Program exited normally.
(gdb) quit
Était-ce utile?

La solution

Il est possible que la sortie GDB est déversée sur l'erreur standard et que vous ne capture la sortie standard. Vous devriez être en mesure de résoudre ce problème avec une redirection, quelque chose comme cela, je pense:

 process = "gdb -q 2&>1".execute()

Une seconde hypothèse est qu'il peut être utile de vérifier ce que « show-mode interactif », dit dans les cas de travail et non-travail. Si elles diffèrent essayer « set-mode interactif off » avant de faire quoi que ce soit d'autre.

Une troisième option consiste à utiliser la fonction de journalisation de GDB pour écrire le fichier journal ( « journalisation de fichiers set » et « set se connecter ») et éviter d'avoir à capturer la sortie vous.

Autres conseils

Si votre test consiste à utiliser gdb pour déboguer en fait quelque chose, par opposition à des tests gdb lui-même, vous devriez probablement en utilisant l'interface GDB / mí.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top