Macos 使用gperftools/pprof时没有函数名

Macos 使用gperftools/pprof时没有函数名,macos,profiling,c++17,clang++,gperftools,Macos,Profiling,C++17,Clang++,Gperftools,我一直在尝试让gperftools CPU评测在我的程序上运行 我遇到了一个问题,当pprof报告时,程序中的所有函数名都是指针地址。令人烦恼的是,我链接的库中的大多数函数名都是可读的,但我的程序文件中没有一个是可读的。下面的例子 s979258ca% pprof --text ./hmiss hmiss.prof Using local file ./hmiss. Using local file hmiss.pr

我一直在尝试让gperftools CPU评测在我的程序上运行

我遇到了一个问题,当pprof报告时,程序中的所有函数名都是指针地址。令人烦恼的是,我链接的库中的大多数函数名都是可读的,但我的程序文件中没有一个是可读的。下面的例子

s979258ca% pprof --text ./hmiss hmiss.prof                                        
Using local file ./hmiss.
Using local file hmiss.prof.
Total: 469 samples
     152  32.4%  32.4%      152  32.4% 0x000000010ba6dd45
      47  10.0%  42.4%       47  10.0% 0x000000010ba6d365
      46   9.8%  52.2%       46   9.8% 0x000000010ba6d371
      34   7.2%  59.5%       34   7.2% 0x000000010ba8a04a
      32   6.8%  66.3%       32   6.8% 0x000000010ba6d35a
      10   2.1%  68.4%       10   2.1% 0x000000010ba8873c
       9   1.9%  70.4%        9   1.9% 0x00007fff63f409da
       6   1.3%  71.6%        6   1.3% 0x000000010ba7feca
       6   1.3%  72.9%        6   1.3% 0x00007fff63f40116
       6   1.3%  74.2%        6   1.3% 0x00007fff63f409f2
       5   1.1%  75.3%        5   1.1% 0x000000010ba6dd4c
       ...
我需要在函数的输出中包含哪些内容

如果有帮助的话,下面是我达到上述目标的过程。 我用下面的选项构建我的程序

clang++
"-std=c++17",
"-g",
"-O2",
"...cpp files..."
"-o",
"~/cpp/hmiss/hmiss",
"/usr/local/Cellar/gperftools/2.7/lib/libprofiler.dylib",
我通过运行

DYLD\u FALLBACK\u LIBRARY\u PATH=/opt/local/lib CPUPROFILE=hmiss.prof./hmiss

然后我运行pprof-text./hmiss-hmiss.prof


从对a的回答中,我认为可能包括调试符号可能会得到其中的名称,但是仅仅用-g构建我的程序似乎没有帮助。此外,删除-O2标志也没有帮助。

使用谷歌的pprof而不是brew的pprof

使用谷歌的pprof而不是brew的pprof

我认为只要-g就足够了,但我想不行。尝试不使用O2。抱歉,我应该补充一点,我也尝试过不使用O2。您尝试过-rdynamic和/或-Wl,-export-dynamic吗?以前没有听说过这些选项,但这是个好主意。遗憾的是-rdynamic不起作用,我无法使用-Wl,-export-dynamic使用clang++或g++编译任何东西。根据这里的说法:第二个选项可能与macos不相关。我认为只要-g就足够了,但我猜不足够。尝试不使用O2。抱歉,我应该补充一点,我也尝试过不使用O2。您尝试过-rdynamic和/或-Wl,-export-dynamic吗?以前没有听说过这些选项,但这是个好主意。遗憾的是-rdynamic不起作用,我无法使用-Wl,-export-dynamic使用clang++或g++编译任何东西。根据这里的说法:第二个选项可能与macos不相关。使用类似于GOPATH=path的内容安装dir go get-u github.com/google/pprofI thinkInstall使用类似于GOPATH=path的内容安装dir go get-u github.com/google/pprofI thinkInstall