Как найти покрытие библиотеки, открытой с помощью dlopen()?

У меня есть библиотека C++ (.so), которая открывается с помощью dlopen() другим приложением. Но мне нужно найти покрытие кода этой библиотеки во время работы в приложении с помощью gcov. Является ли это возможным? Если да, как это можно сделать?

Если нет, то как можно решить проблему?

1 ответ

Во-первых, скомпилируйте свою библиотеку C++ с --coverage флаг? Я никогда раньше не использовал библиотеку.so с gcov, поэтому я не уверен, что она все равно будет работать.

Во-вторых, не могли бы вы организовать тестовую версию вашего приложения, чтобы не использовать dlopen(), но вместо этого быть связан со статической библиотекой (.a) версии вашей библиотеки и по-прежнему делать обычные вызовы?

Да. Покрытие общей библиотеки, загруженнойdlopen могут быть созданы.

1) компилировать разделяемую библиотеку с флагами -fprofile-arcs -ftest-coverage

2) скомпилировать программу, использующую dlopen с флагами -fprofile-arc -ftest-coverage

3) lcov для генерации .info файл

lcov --capture --rc lcov_branch_coverage=1 --directory path/to/.gcda --output-file coverage.info 

4) генерировать html

genhtml coverage.info --branch-coverage --output-directory out 
Другие вопросы по тегам