【发布时间】:2023-03-03 15:13:01
【问题描述】:
据我所知,使用-fprofile-arcs 标志编译代码会在代码执行后生成.gcda 文件。与-ftest-coverage标志一起编译后的.gcno文件,可以得到执行了哪些代码,执行了多少次的信息,得到所谓的代码覆盖率报告。
是否有可能以类似的方式从.gcna 文件中获取类似于gprof 的配置文件信息,例如函数调用计数和执行时间信息?
【问题讨论】:
据我所知,使用-fprofile-arcs 标志编译代码会在代码执行后生成.gcda 文件。与-ftest-coverage标志一起编译后的.gcno文件,可以得到执行了哪些代码,执行了多少次的信息,得到所谓的代码覆盖率报告。
是否有可能以类似的方式从.gcna 文件中获取类似于gprof 的配置文件信息,例如函数调用计数和执行时间信息?
【问题讨论】:
我不敢这么说,但您误解了这里的术语。
GPROF:它是一个 C/C++ 程序分析器。其目的是为特定执行生成分析信息,其中包括性能统计信息,例如不同函数之间的控制流,以及与父函数和子函数单独消耗的传播时间的关系。因此,这里的重点是在程序中找到性能下降点。
在哪里,
GCOV:它是一个 C/C++ 覆盖率分析工具。其目的是获取每个语句、分支和块的执行计数。因此,这里的重点是获取覆盖率统计信息。
因此,故事的寓意是这两种工具具有不同的生活目的。 ;)
如果您希望同时获得可以使用 gprof 的信息,尽管它在很多情况下都有局限性,但它也会以方法级别的粒度为您提供覆盖率信息。
【讨论】:
gprof,但由于它使用SIGPROF,它完全破坏了我拥有的所有代码,因为我等待各种事件并且所有这些调用都不会检查errno返回时为EINTR。为了能够运行gprof,100% 遵守这一要求是一项艰巨的工作。相反,我一直在使用 vtune(由 Intel 提供),这不需要我重新设计 99% 的代码。