4

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

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

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

 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

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

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

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'

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

Благодарю.

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

May 02, 2012, 7:09 AMот

3ответа

9

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

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

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

0

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

0

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

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

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

RelatedQuestions