Нет покрытия при использовании gcov с дочерним процессом и общей библиотекой

Я использую gcov для исполняемого файла теста c ++, который порождает дочерний процесс. Дочерний процесс содержит библиотеку общих объектов. Тестовый процесс, дочерний процесс и библиотека общих объектов скомпилированы в отдельных каталогах. Я использую флаги -fprofile-arcs -ftest-покрытие для компиляции и компоновки. Когда я компилирую, я получаю файлы .gcno для дочернего процесса и разделяемой библиотеки. Но когда я запускаю исполняемый файл, я могу получить только вывод покрытия для родительского процесса.

У меня вопрос, есть ли какие-то особые шаги, чтобы охватить этот дочерний процесс своей общей библиотекой?

Вопрос справочного форума gcc Вот (относительно gcov с библиотеками разделяемых объектов) объясняет, что разделяемая библиотека должна быть собрана в том же каталоге, в котором вы запускаете свой исполняемый файл.

Означает ли это, что для получения тестового покрытия я должен скомпилировать каждый компонент (родительский тестовый процесс, дочерний процесс и библиотеку общих объектов) в одном каталоге?

2

Решение

Вот что я сделал, чтобы заставить работать gcov …

  1. Я скомпилировал библиотеку разделяемых объектов и два исполняемых файла в их соответствующих каталогах, и я убедился, что использовал флаги при компиляции и связывании их (-fprofile-arcs -ftest-покрытие). Расположение этих двоичных файлов оказалось не важным. Что было важно, так это использование флагов, позволяющих gcc обрабатывать код.

  2. Я скопировал получившийся .so и два исполняемых файла в каталог.

  3. Затем я запустил исполняемый файл теста, который запустил (разветвил) другой (дочерний) исполняемый файл, связанный с библиотекой общего объекта.

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

  5. Затем я запустил «gcov * .cpp» для исходных файлов, для которых я хотел получить покрытие кода.

  6. Выполнение шага 5 приводит к одному файлу .gcda для каждого .cpp, на котором я запускал gcov. Это фактические файлы, которые показывают покрытие кода. Откройте их в своем любимом редакторе и просмотрите.

0

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

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