Почему данные ‘gcov’ не генерируются при запуске программы с ожидаемым результатом?

Предположим, исходный файл называется xmpl.cpp (описанный Фрёлихом, например). При компиляции этого файла с gcc с флагами -fprofile-arcs а также -ftest-coverageон генерирует в обычном двоичном исполняемом файле xmpl и файл данных gcov xmpl.gcno, Затем, когда программа выполняется другой файл данных gcov xmpl.gcna генерируется, этот содержит информацию, собранную во время выполнения.

Тем не менее, когда я использую сценарий ожидаемого запуска той же программы, нет xmpl.gcna генерируется. Более конкретно, проблема заключается в spawn команда, с exec все хорошо (но тогда зачем использовать ожидаемо, верно?).

Я заинтересован в решении этой проблемы, потому что у нас есть множество ожидаемых сценариев, выполняющих некоторые тесты в нашем проекте, и в настоящее время информация о покрытии для этих тестов не создается. Код для примера, описанного выше, можно получить Вот.

2

Решение

И то и другое spawn а также exec создать новый процесс для выполнения программы. Разница между ними в том, что exec приостанавливает выполнение TCL (Expect) до завершения выполнения. Поскольку программа никогда не достигает своего «естественного конца» при запуске программы с spawn, информация о покрытии не может быть сгенерирована.

Чтобы решить эту проблему, нужно дождаться завершения подпроцесса, прежде чем сценарий ожидаемого завершения завершит свое выполнение, чего можно добиться, ожидая eof, Вот как должен выглядеть ожидаемый скрипт:

#!/usr/bin/expect -f

spawn ./xmpl Hey! xxx

expect eof
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]