Pergunta

Estou tentando escrever testes que interagem com o GDB, mas estou tendo problemas para capturar a saída. Eu gostaria que um arquivo de log fosse gerado, que se parece com o que teria sido visto em um terminal se o teste fosse executado manualmente. O GDB está se mostrando muito teimoso quando se trata de capturar sua saída.

Consegui escrever scripts esperados capazes de interagir com o GDB e cuja saída pode ser redirecionada para um arquivo de log, mas não quero escrever meus testes no TCL. Espero usar o Groovy, que é compatível com o Java. Por alguma razão, com a espera de Perl e a expectativa, a saída do programa sempre vai para o terminal e não pode ser redirecionada para um arquivo.

Tentei iniciar um processo GDB do Java usando o ProcessBuilder e ele funciona principalmente, mas a saída das instruções de impressão nunca aparece no stdout e não pode ser capturada. Eu pensei que, se esperar funcionar, o lançamento do Java e o interagirá com o GDB, mas, neste caso, a maior parte da saída do programa é perdida, nunca aparecendo no processo do processo criado.

Então, minha pergunta é: como posso escrever um teste no Groovy (Java também ficaria bem) que interage com o GDB e pode capturar toda a saída?

Pseudo-código:

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

Arquivo de log:

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

Program exited normally.
(gdb) quit
Foi útil?

Solução

Uma possibilidade é que a saída do GDB esteja sendo despejada em erro padrão e você está capturando apenas a saída padrão. Você deve ser capaz de consertar isso com um redirecionamento, algo assim, eu acho:

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

Um segundo palpite é que pode valer a pena verificar o que "Mostrar modo interativo" diz nos casos que trabalham e não trabalham. Se eles diferirem, tente "definir o modo interativo" antes de fazer qualquer outra coisa.

Uma terceira opção é usar o recurso de log do GDB para gravar o arquivo de log ("Definir arquivo de log" e "Definir login") e evitar ter que capturar a saída você mesmo.

Outras dicas

Se o seu teste envolver o uso do GDB para realmente depurar algo, em vez de testar o próprio GDB, você provavelmente deve procurar usar a interface GDB/MI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top