2

我有一个主机应用程序,并且我编写了一个插件。我将我的插件编译成一个共享对象(比如 foo.so),宿主应用程序将通过 dlopen 加载它。在这种情况下,我的主机应用程序是来自 llvm 的 opt 工具(尽管我认为这对这个问题并不重要)。

我想在启用分析的情况下编译我的插件(即g++ -pg, gprof)。但是,当我这样做时,永远不会创建配置文件输出文件 gmon.out。也许 gprof 期望有人调用一个设置例程,或者类似的东西。

由于各种原因,我想避免使用 -pg 重新编译主机应用程序。我很好奇是否可以在不分析主机应用程序 opt 的情况下分析共享对象 foo.so。

我还研究了其他分析工具;HP 的 qprof 应该能够处理这种情况,但它无法解析共享对象中的函数名称(它以非常幼稚的方式回退到 addr2line)。

谢谢,尼克

4

1 回答 1

0

我假设您想要这样做的原因是想办法优化插件(而不是仅仅获取时间信息)。

您可以在调试器或 IDE 下运行主机应用程序吗?IDE 是否有暂停按钮,或者您可以使用 Ctrl-C 或类似的键中断它吗?

然后,您可以使用此技术快速找到昂贵的代码。仅在您的插件运行时采样,或者如果您不能这样做,则忽略未在您的插件中结束的示例。

即使您使用gprof或类似的分析器,您也可能会感到失望

于 2010-02-19T15:03:31.457 回答