我已经配置并构建了gpreftools。但是,我似乎无法找到我的程序生成的配置文件来显示它。
我采取了以下行动:
将-lprofiler
链接器标志添加到.pro
,构建程序并在链接阶段正确添加标志。
QMAKE_LFLAGS += -lprofiler
运行:
$ CPUPROFILE=/tmp/prof.out /path/to/executable
执行:
$ pprof --gv /path/to/MyExe /tmp/prof.out
然后我得到以下内容:
Failed to get profile: curl -s --max-time 90 'http:///pprof/profile?seconds=30' > /home/eslam/pprof/.tmp.MyExe.1509005857.: No such file or directory.
任何人都对此有决心吗?
答案 0 :(得分:1)
检查您的程序是否实际链接到libprofiler.so。某些操作系统(例如AFAIK某些版本的ubuntu)实际上并没有添加.so,如果实际上没有使用任何符号。例如。 ldd ./yourprogram应列出libprofiler.so。如果没有发生这种情况,那么你应该在你的链接器标志之前添加-Wl, - no-as-needed之类的内容。
答案 1 :(得分:1)
LD_PRELOAD
方法
除了在构建时间mentioned by Eslam传递-Wl,--no-as-needed,-lprofiler,--as-needed
之外,还可以通过在运行时传递LD_PRELOAD
选项,使它无需修改构建即可工作:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libprofiler.so CPUPROFILE=prof.out ./main.out
您可以使用libprofiler.so
轻松找到locate libprofiler.so
。
另请参阅:How can I profile C++ code running on Linux?
在Ubuntu 18.04中测试。