使用Google Perf工具和动态库分析C ++

时间:2009-06-21 18:46:49

标签: c++ debugging profiling

我正在尝试分析一个我没写过的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中进行采样,我没关系。或者我如何才能使分析工作?

3 个答案:

答案 0 :(得分:3)

此错误是由jags作为shell脚本引起的,后来称为profilable代码。

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

解决了这个问题。

答案 1 :(得分:0)

我没有看到一个干净的方法,但也许有一个hacky解决方法 - 如果你破解pprof perl脚本(或更好的副本;-),第2834行会发生什么,所以不要打电话error它会发出消息然后return undef;

答案 2 :(得分:0)

如果您正在对OSX进行分析,那么Shark工具也非常棒。它使用起来非常简单,并且在我尝试使用时已经开箱即用了。