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

Aga*_*ade 13 gcc g++ gprof

我想使用 gcc 的 gprof 逐行分析。但是在编译我的程序、运行它并执行之后,gprof -l binary_name我收到如下消息:

gprof: somebody miscounted: ltab.len=9403 instead of 9391
Run Code Online (Sandbox Code Playgroud)

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

我怀疑这个错误不应该被最终用户看到,因为它没有给出解决方案的提示,并提到ltab.len这很可能是用户不会熟悉的 gcc 代码中的变量。

F. *_*ser 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
Run Code Online (Sandbox Code Playgroud)

我想编译器优化后,gprof无法将分析器输出映射到行。