Предположим, исходный файл называется xmpl.cpp
(описанный Фрёлихом, например). При компиляции этого файла с gcc
с флагами -fprofile-arcs
а также -ftest-coverage
он генерирует в обычном двоичном исполняемом файле xmpl
и файл данных gcov xmpl.gcno
, Затем, когда программа выполняется другой файл данных gcov xmpl.gcna
генерируется, этот содержит информацию, собранную во время выполнения.
Тем не менее, когда я использую сценарий ожидаемого запуска той же программы, нет xmpl.gcna
генерируется. Более конкретно, проблема заключается в spawn
команда, с exec
все хорошо (но тогда зачем использовать ожидаемо, верно?).
Я заинтересован в решении этой проблемы, потому что у нас есть множество ожидаемых сценариев, выполняющих некоторые тесты в нашем проекте, и в настоящее время информация о покрытии для этих тестов не создается. Код для примера, описанного выше, можно получить Вот.
И то и другое spawn
а также exec
создать новый процесс для выполнения программы. Разница между ними в том, что exec
приостанавливает выполнение TCL (Expect) до завершения выполнения. Поскольку программа никогда не достигает своего «естественного конца» при запуске программы с spawn
, информация о покрытии не может быть сгенерирована.
Чтобы решить эту проблему, нужно дождаться завершения подпроцесса, прежде чем сценарий ожидаемого завершения завершит свое выполнение, чего можно добиться, ожидая eof
, Вот как должен выглядеть ожидаемый скрипт:
#!/usr/bin/expect -f
spawn ./xmpl Hey! xxx
expect eof
Других решений пока нет …