Как найти покрытие библиотеки, открытой с помощью 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