gperftools - 配置文件未转储

gperftools - profile file not dumped

我已经配置并构建了 gpreftools。但是,我似乎找不到我的程序生成的配置文件来显示它。

我采取了以下行动:

  1. -lprofiler 链接器标志添加到我的 .pro,构建程序并在链接阶段正确添加标志。 QMAKE_LFLAGS += -lprofiler

  2. 运行: $ CPUPROFILE=/tmp/prof.out /path/to/executable

  3. 正在执行: $ 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 中测试。