【问题标题】:gperftools - profile file not dumpedgperftools - 配置文件未转储
【发布时间】:2018-04-07 13:06:24
【问题描述】:

我已经配置并构建了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.

有人对此有解决方案吗?

【问题讨论】:

    标签: profiling ubuntu-14.04 qt-creator gperftools


    【解决方案1】:

    检查您的程序是否确实链接到 libprofiler.so。某些操作系统(例如 AFAIK 某些版本的 ubuntu)实际上并没有添加 .so 如果没有实际使用它的符号。例如。 ldd ./yourprogram 应该列出 libprofiler.so。如果这没有发生,那么你应该在你的链接器标志前面加上 -Wl,--no-as-needed 之类的东西。

    【讨论】:

    • 正确,使用 ldd 列出动态依赖项不会产生 libprofiler.so。使用 QMAKE_LFLAGS += -Wl,--no-as-needed,-lprofiler,--as-needed。尽管打开 --as-needed 选项以不链接额外的依赖项,但这一点非常重要。
    【解决方案2】:

    LD_PRELOAD方法

    除了在构建时传递-Wl,--no-as-needed,-lprofiler,--as-needed mentioned by Eslam,您还可以通过在运行时传递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 中测试。

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 2019-07-10
      • 2021-06-21
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      相关资源
      最近更新 更多