首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >this=<optimized out>在GDB中的意义

this=<optimized out>在GDB中的意义
EN

Stack Overflow用户
提问于 2022-11-09 23:18:11
回答 1查看 80关注 0票数 -1

我理解使用像-O2这样的优化标志的一般概念,并最终得到优化的结果,这是有意义的。但是,对gdb帧中的“this”函数参数进行优化意味着什么呢?它是否意味着对象的使用被确定为完全没有意义,并且它和下面的函数调用被从存在中删除?这是否意味着功能已被内联?它是否表示函数调用已被删除?

我该如何进一步调查呢?这发生在-O0和-Og中。

如果有任何不同,这是一个ARM过程。我正在使用gdbserver ( gdb ) 7.12.1.20170417-git和(Ubuntu8.1.1-0ubuntu1) 8.1.1进行远程调试。

EN

回答 1

Stack Overflow用户

发布于 2022-11-10 00:53:23

,但是对gdb帧中的“this”函数参数进行优化意味着什么呢?

这意味着GDB没有足够的调试信息来理解this的当前值。

发生这种情况可能有两个原因:

  1. 编译器未能发出相关的调试信息
  2. (信息在那里),但GDB未能理解它的

GCC过去在-O2和更高的优化水平上做了很多工作,但在2015-2016年前后已经有了很大的改善。我从来没有见过<optimized out>和GCC在-O0

在2022年,Clang仍然在x86_64上使用x86_64和更高的版本(1),但我在-O0上从未见过它这样做。

,我该如何进一步调查呢?

您可以运行readelf --debug-dump ./a.out并查看二进制文件中显示的信息。当心--这里有很多信息,要弄明白它需要了解应该是什么。

或者,您可以使用精确的编译器和调试器版本以及编译命令提交bugzilla问题,附加一个小二进制文件,并希望有人查看。

但是,首先要确保您仍然可以从最新发布的GCC和GDB版本中获得这种行为(或者,如果您可以构建当前的主干版本的话)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74382471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档