GCC gprof 逐行错误“有人错误计数”

问题描述 投票:0回答:2

我想使用 gcc 的 gprof 逐行分析。但是在编译我的程序、运行它并执行

gprof -l binary_name
后,我收到如下消息:

gprof: somebody miscounted: ltab.len=9403 instead of 9391

gprof binary_name
运行没有错误,但我无法使用
-l
选项运行。我无法找到这方面的文档。谷歌自动完成表明我不是第一个收到此错误的人,但我找不到任何相关线程。我尝试过 g++-9 g++-10 和 g++-11。我尝试过使用
-g
-ggdb
进行编译。我认为也许 gprof 不喜欢我的程序是多线程的,但即使删除 OpenMP 依赖项并告诉 libtorch 使用 1 个线程,我也会得到相同的行为。

我怀疑这个错误不应该被最终用户看到,因为它没有给出解决方案的提示,并提到

ltab.len
这很可能是用户不会熟悉的 gcc 代码中的变量。

gcc g++ gprof
2个回答
3
投票

我不知道这是否是通用解决方案,但对我来说,我意识到当您启用优化时会发生此错误。如果我编译:

g++ -g -pg -O3 main.cpp # gprof: somebody miscounted: ltab.len=1034 instead of 1027
g++ -g -pg -O2 main.cpp # gprof: somebody miscounted: ltab.len=775 instead of 768
g++ -g -pg -O1 main.cpp # gprof: somebody miscounted: ltab.len=640 instead of 633
g++ -g -pg -O0 main.cpp # this works

我猜编译器优化后,

gprof
无法将分析器输出映射到行。


0
投票

通过从 gprof 命令中删除 -l,我能够使带有 -02 优化的 g++ -pg -g 正常工作。 所以首先编译并运行程序。然后将 gmon.out 和使用调试选项编译的二进制文件移动到同一目录中。然后运行

sudo gprof binary_name gmon.out binary_name > output.txt

© www.soinside.com 2019 - 2024. All rights reserved.