Вопрос по gcc, gcov – gcov не генерирует gcda файлы

4

Я пытался запустить GCOV с-fprofile-arcs & Амп;-ftest-coverage и ничего для ссылки.

Он давал эту ошибку:

<code> hidden symbol `__gcov_init' in /home/mojave/tools/gcc-4.4.1/amd64/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.4.1/libgcov.a(_gcov.o) is referenced by DSO
</code>

и программа выходит.

Команда для компиляции

<code>bsub -g /mojave/build/"DummyDate" -J compile-obj/linux24rhel3_x86_64_GCOV64/DXp.o -I -q DFM -S 8192 -R "(model==OPTERON_250)" '/usr/bin/time --format="          ...finished DXp [`hostname`] [%E s with %P CPU]"  /home/mojave/tools/gcc-4.4.1/amd64/bin/g++ -fPIC -Wall -Wno-deprecated -DTCL_8_5 -m64 -march=opteron -DLITTLE_ENDIAN_PLATFORM -DARCH=amd64 -DARCH_amd64 -DARCH_BITS=64 -DARCH_BITS_64 -fsigned-char -msse3 -D__DISABLE_MULTITHREAD__ -D_CPP_NUMERIC_LIMITS -mfpmath=sse,387 -mmmx -m3dnow -pipe -Dgcc -DLICENSE_ALWAYS_GOOD -I/home/mojave/tools/flexlm/include/v8.4 -DNO_SUPPORT_STABIE -DGCOV -I../dxpclient -I/home/mojave/tools/bzip2-1.0.2/amd64/include -I/home/mojave/tools/zlib-1.2.3/amd64/include -I/home/mojave/tools/tcltk8.5.2/amd64//include -I/home/mojave/tools/tcltk8.5.2/amd64//include -g -fprofile-arcs -ftest-coverage -DBUILD_DATE=\""UNSET"\" -DVERSION_NUMBER=\"Dum.Dum.Dum.Dummy\" -DEXT_VERSION_NUMBER=\"Dum.Dum.Dum.Dummy\" -DLAST_RELEASE_VERSION=\"1.1614\" -Wreturn-type -DTCL_8_5 -DGOOGLE_MALLOC -L../dx/linux24rhel3_x86_64_GCOV64/ -ldx -o obj/linux24rhel3_x86_64_GCOV64/DXp obj/linux24rhel3_x86_64_GCOV64/DXp.o -Wl -lgcov /home/mojave/tools/zlib-1.2.3/amd64/lib/libz.a  -L/home/mojave/tools/bzip2-1.0.2/amd64/lib -lbz2    -ldl'
</code>

Любая помощь будет оценена с голосования.

Благодарю.

Можете ли вы показать нам Makefile или строку компиляции? Вполне возможно, что вы прикрепляете флаги профиля к неправильному целевому объекту. Shrey

Ваш Ответ

3   ответа
0

что если я отправляю sig kill или sig термин в мою программу, то создаются ТОЛЬКО GCNO ФАЙЛЫ, а не файлы gcda.

9

-fprofile-arcs а также-ftest-coverage, Связать с-lgcov во время генерации общего объекта. Это будет работать.

Также вы можете использовать--coverage опция как синоним для всех трех шагов

Смотреть на:Опции инструментов GCC для дополнительной информации

Я пробую эти команды, но все еще нет файла gcda:g++ -fprofile-arcs -ftest-coverage -lgcov main.cpp  Я скучаю по чему-нибудь еще?
@ naive231 У меня лично была эта проблема, потому что у меня был бесконечный цикл for (;;) в конце моего основного метода. Программа должна выйти для правильного создания файлов gcda.
Примечание: использование--coverage для компиляции и ссылки автоматически переводит флаги, которые вы даете. Это удобство, предлагаемое gcc для упрощения работы. Также на будущее. Наслаждайтесь !
0

После рассмотрения флага компиляции, как указано вышеcrazy_prog, check the "path". While taking the coverage using lcov/gcov, path plays an important role.

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

Для моей цели, поскольку создание двоичного файла и его выполнение выполняются в разных местах (одно в среде разработки, а другое на реальной плате), поэтому, используя softlink / ярлыки, я создаю аналогичный путь и, следовательно, запускаю исполняемый файл. Наконец, можно генерировать отчет в среде разработки (обычно, поскольку на реальной плате на платформе может не быть поддержки инструментов lcov).

Похожие вопросы