我有一个主机应用程序,我已经编写了一个插件。我将我的插件编译成共享对象(比如foo.so),主机应用程序将通过dlopen加载它。在这种情况下,我的主机应用程序是来自llvm的opt工具(虽然我认为这对问题不重要)。
我想编译我的插件并启用了性能分析(即g++ -pg
,gprof
)。但是,当我这样做时,永远不会创建配置文件输出文件gmon.out。也许gprof希望有人调用一个安装例程,或类似的东西。
由于各种原因,我想避免使用-pg重新编译主机应用程序。我很好奇是否可以在不对主机应用程序进行概要分析的情况下分析共享对象foo.so。
我也研究过其他的分析工具; HP的qprof应该能够处理这种情况,但它无法解析共享对象中的函数名称(它以非常天真的方式回退到addr2line)。
谢谢, 尼克
答案 0 :(得分:0)
我认为你想要这样做的原因是找到优化插件的方法(而不仅仅是获取时间信息)。
您可以在调试器或IDE下运行主机应用程序吗? IDE是否有暂停按钮,还是可以使用Ctrl-C或某些键来中断它?
然后,您可以使用this technique快速找到代价高昂的代码。只在您的插件运行时采样,或者如果您不能这样做,只需忽略不在插件中结束的示例。
即使您使用 gprof 工作,也可以使用类似的探查工具you're likely to be disappointed。