5

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

我采取了以下措施:

  1. -lprofiler链接器标志添加到 my .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.

有人对此有解决方案吗?

4

2 回答 2

7

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

于 2017-10-30T19:14:53.433 回答
1

LD_PRELOAD方法

除了在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

另请参阅:如何分析在 Linux 上运行的 C++ 代码?

在 Ubuntu 18.04 中测试。

于 2020-02-18T11:58:34.510 回答