我一直在尝试让 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
...
我需要做什么才能让我的函数名称包含在 pprof 输出中?
如果有帮助,这就是达到上述目的的过程对我来说是怎样的。我使用以下选项构建我的程序
clang++
"-std=c++17",
"-g",
"-O2",
"...cpp files..."
"-o",
"~/cpp/hmiss/hmiss",
"/usr/local/Cellar/gperftools/2.7/lib/libprofiler.dylib",
我通过运行使用 gprof 启用 CPU 分析
DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib CPUPROFILE=hmiss.prof ./hmiss
然后我跑pprof --text ./hmiss hmiss.prof
从一个类似问题的答案中,我认为可能包括调试符号可能会在其中获得名称,但仅使用 -g 构建我的程序似乎没有帮助。此外,删除 -O2 标志也无济于事。