gperftools - 配置文件未转储
gperftools - profile file not dumped
我已经配置并构建了 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.
有人对此有解决方案吗?
检查您的程序是否实际链接到 libprofiler.so。某些操作系统(例如 AFAIK ubuntu 的某些版本)实际上不会添加 .so 如果 none 它的符号被实际使用。例如。 ldd ./yourprogram 应该列出 libprofiler.so。如果这没有发生,那么您应该在您的链接器标志前添加类似 -Wl,--no-as-needed 的内容。
LD_PRELOAD
没有重建的方法
除了在构建时传递 -Wl,--no-as-needed,-lprofiler,--as-needed
之外 ,您还可以通过在运行时传递 LD_PRELOAD
选项来使其在不修改构建的情况下工作:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libprofiler.so CPUPROFILE=prof.out ./main.out
您可以通过 locate libprofiler.so
轻松找到 libprofiler.so
。
另请参阅:How can I profile C++ code running on Linux?
在 Ubuntu 18.04 中测试。
我已经配置并构建了 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.
有人对此有解决方案吗?
检查您的程序是否实际链接到 libprofiler.so。某些操作系统(例如 AFAIK ubuntu 的某些版本)实际上不会添加 .so 如果 none 它的符号被实际使用。例如。 ldd ./yourprogram 应该列出 libprofiler.so。如果这没有发生,那么您应该在您的链接器标志前添加类似 -Wl,--no-as-needed 的内容。
LD_PRELOAD
没有重建的方法
除了在构建时传递 -Wl,--no-as-needed,-lprofiler,--as-needed
之外 LD_PRELOAD
选项来使其在不修改构建的情况下工作:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libprofiler.so CPUPROFILE=prof.out ./main.out
您可以通过 locate libprofiler.so
轻松找到 libprofiler.so
。
另请参阅:How can I profile C++ code running on Linux?
在 Ubuntu 18.04 中测试。