使用Google Perf工具和动态库进行C++性能分析

3
我正在尝试对一个我没有编写的C++应用程序进行剖析,以便了解主要计算点的位置。我不是C++专家,更不是C++调试/剖析专家。我相信我遇到了动态库的(常见?)问题。
我使用以下命令(在OS X上使用G++)编译链接到Google CPU Profiler:(链接到文档)
env LIBS=-lprofiler ./configure
make
make install

然后我运行以下命令对已安装的应用程序(jags)进行分析:

env CPUPROFILE=./jags.prof /usr/local/bin/jags regression.cmd
pprof /usr/local/bin/jags jags.prof

很不幸,我遇到了错误:

pprof /usr/local/bin/jags jags.prof Can't exec "objdump": 
No such file or directory at /usr/local/bin/pprof line 2833.
objdump /System/Library/Frameworks/Accelerate.framework/Versions/A/ Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib: No such file or directory

该程序动态链接到 libLAPACK.dylib。 因此,prof 似乎无法理解它(?)。 我考虑尝试静态链接,但与该程序关联的文档说不可能在 LAPACK 或 BLAS 中进行静态链接(这是两个所需库)。

有没有一种方法可以使分析器忽略 libLAPACK? 如果它不能在 libLAPACK 中进行采样,那也没关系。或者我该如何让分析工具正常工作呢?


我相信我的问题实际上是因为OSX没有objdump'。它使用otool'代替。如果有人知道解决方案,请告诉我... - Tristan
3个回答

3

这个错误是由于jags是一个shell脚本,进而调用可剖析代码所致。

pprof /usr/local/bin/REAL_EXEC jags.prof

修复了问题。

0

我没有看到一个干净的方法来做到这一点,但也许有一个hacky的解决方法 - 如果你修改pprof perl脚本(最好是它的副本;-),在第2834行,改为发出消息,然后执行return undef;,会发生什么?


0

如果你在OSX上进行性能分析,Shark工具也非常好用。它非常简单易用,在我尝试使用时直接开箱即用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接