Domanda

Sto cercando di scrivere i test che interagiscono con GDB, ma sto avendo difficoltà catturare l'uscita. Vorrei per un file di log da generare che assomiglia a quello che sarebbe stato visto in un terminale era il test stato eseguito a mano. GDB sta dimostrando di essere molto testardo quando si tratta di catturare la sua uscita comunque.

Sono stato in grado di scrivere script Aspettatevi che sono in grado di interagire con GDB e la cui uscita può essere reindirizzato a un file di log, ma io non voglio scrivere il mio test in TCL. Spero di usare Groovy, che è compatibile con Java. Per qualche motivo con il Perl di aspettarsi e ExpectJ l'output del programma va sempre al terminale e non può essere reindirizzato a un file.

Ho cercato di iniziare un processo di GDB da Java utilizzando ProcessBuilder e funziona per lo più, ma l'uscita di dichiarazioni di stampa appaiono mai sul stdout e non può essere catturato. Ho pensato che se Aspettatevi lavori poi mi piacerebbe lanciare aspettarsi da Java e farlo interagire con GDB ma in questo caso la maggior parte del programma di uscita è perso, non compare nella stdout del processo di creazione.

Quindi la mia domanda è, come posso scrivere un test in Groovy (Java sarebbe bene così), che interagisce con GDB e in grado di catturare tutta la produzione?

pseudo-codice:

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

file di log:

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

Program exited normally.
(gdb) quit
È stato utile?

Soluzione

Una possibilità è che l'uscita GDB è oggetto di dumping su standard error e si sta solo catturando standard output. Dovreste essere in grado di risolvere questo problema con un redirect, qualcosa come questo penso:

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

Una seconda ipotesi è che potrebbe essere la pena di verificare che cosa "spettacolo interattivo-mode", dice nei casi di lavoro e non-lavoro. Se differiscono provare "set interattivo-mode off" prima di fare qualsiasi altra cosa.

Una terza opzione è quella di utilizzare funzione di registrazione di GDB per scrivere il file di registro ( "set file di log" e "impostare la registrazione on") ed evitare di dover catturare l'output da soli.

Altri suggerimenti

Se il test comporta l'uso di gdb per eseguire il debug in realtà qualcosa, al contrario di test gdb sé, probabilmente si dovrebbe considerare di usare l'interfaccia gdb / mi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top