我正在尝试分析一个我没写过的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中进行采样,我没关系。或者我如何才能使分析工作?
答案 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工具也非常棒。它使用起来非常简单,并且在我尝试使用时已经开箱即用了。