Я пытаюсь написать тесты, которые взаимодействуют с GDB, но у меня возникают проблемы с записью выходных данных. Я хотел бы, чтобы был создан файл журнала, который выглядит так, как если бы тест выполнялся вручную. Однако GDB оказывается очень упрямым, когда дело доходит до захвата своей продукции.
Мне удалось написать сценарии Expect, которые могут взаимодействовать с GDB и чьи выходные данные могут быть перенаправлены в файл журнала, но я не хочу писать свои тесты в TCL. Я надеюсь использовать Groovy, который совместим с Java. По какой-то причине в Perl Expect и ExpectJ вывод программы всегда идет на терминал и не может быть перенаправлен в файл.
Я попытался запустить процесс GDB из Java с использованием ProcessBuilder, и он в основном работает, но вывод операторов print никогда не появляется на stdout и не может быть захвачен. Я подумал, что если Expect сработает, то я запустил бы ожидаемый от Java и дал бы ему взаимодействовать с GDB, но в этом случае большая часть выходных данных программы теряется, никогда не появляясь в stdout созданного процесса.
Итак, мой вопрос, как я могу написать тест на Groovy (с Java тоже будет хорошо), который взаимодействует с GDB и может захватывать весь вывод?
Псевдо-код:
process = "gdb -q".execute()
waitForPrompt()
send("file exec")
waitForPrompt()
send("run")
send("quit")
Файл журнала:
(gdb) file exec
Reading symbols from exec...done.
(gdb) run
Starting program: exec
<... output ...>
Program exited normally.
(gdb) quit