如何查找使用 dlopen() 打开的库的覆盖范围?
我有一个 C++ 库 (.so),由另一个应用程序使用 dlopen() 打开。但我需要在使用 gcov 在应用程序中运行时找到该库的代码覆盖率。是否可以?如果是的话,该怎么办?
如果不能,问题该如何解决?
I have a C++ library (.so) which is opened using dlopen() by another application. But I need to find the code coverage of this library while run within the application using gcov. Is it possible? If yes, how can it be done?
If not, how can the issue be resolved?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,您是否使用
--coverage
标志编译了 C++ 库?我以前从未在 gcov 中实际使用过“.so”库,所以我不确定它是否会起作用。其次,您是否可以安排应用程序的测试版本不使用 dlopen(),而是链接到库的静态库(.a) 版本并仍然进行常规调用?
Firstly have your compiled your C++ library with the
--coverage
flag? I've never actually used a '.so' library with gcov before, so I'm not sure it would work anyway.Secondly could you arrange a test version of your application to not use
dlopen()
, but instead be linked to a static library(.a) version of your library and still make the usual calls?是的。可以生成
dlopen
加载的共享库的覆盖范围。1) 使用标志
-fprofile-arcs -ftest-coverage
编译共享库2) 使用
dlopen
标志-fprofile-arc -ftest-coverage< 编译程序/code>
3) lcov 生成
.info
文件4) 生成html
Yes. Coverage of shared library loaded by
dlopen
can be generated.1) compile shared library with flags
-fprofile-arcs -ftest-coverage
2) compile program that using
dlopen
with flags-fprofile-arc -ftest-coverage
3) lcov to generate
.info
file4) generate html