我理解使用像-O2这样的优化标志的一般概念,并最终得到优化的结果,这是有意义的。但是,对gdb帧中的“this”函数参数进行优化意味着什么呢?它是否意味着对象的使用被确定为完全没有意义,并且它和下面的函数调用被从存在中删除?这是否意味着功能已被内联?它是否表示函数调用已被删除?
我该如何进一步调查呢?这发生在-O0和-Og中。
如果有任何不同,这是一个ARM过程。我正在使用gdbserver ( gdb ) 7.12.1.20170417-git和(Ubuntu8.1.1-0ubuntu1) 8.1.1进行远程调试。
发布于 2022-11-10 00:53:23
,但是对gdb帧中的“this”函数参数进行优化意味着什么呢?
这意味着GDB没有足够的调试信息来理解this
的当前值。
发生这种情况可能有两个原因:
。
GCC过去在-O2
和更高的优化水平上做了很多工作,但在2015-2016年前后已经有了很大的改善。我从来没有见过<optimized out>
和GCC在-O0
。
在2022年,Clang仍然在x86_64
上使用x86_64
和更高的版本(1),但我在-O0
上从未见过它这样做。
,我该如何进一步调查呢?
您可以运行readelf --debug-dump ./a.out
并查看二进制文件中显示的信息。当心--这里有很多信息,要弄明白它需要了解应该是什么。
或者,您可以使用精确的编译器和调试器版本以及编译命令提交bugzilla问题,附加一个小二进制文件,并希望有人查看。
但是,首先要确保您仍然可以从最新发布的GCC和GDB版本中获得这种行为(或者,如果您可以构建当前的主干版本的话)。
https://stackoverflow.com/questions/74382471
复制相似问题