0

在发布调试时,c++ 代码不会扩展某些变量。哪些变量是不能扩展的,为什么会这样?我可以理解发布 dll 已经打包了额外的优化,但不太确定这是否是唯一的原因。还有什么办法可以查看这些值

4

2 回答 2

2

即使假设您在构建中有调试信息,调试发布构建(优化)通常也很困难。优化器可以将代码的结果破坏到您可能无法识别的程度。

它将完全删除变量并将它们隐藏在调试器中(由于变量不存在,调试器无法显示它们)。它可能不会删除它,但会暂时将空间重新用于寄存器溢出,您将看到变量跳转到某个随机值的内存值。流程可能会重新排序,并且变量可能是并且一旦初始化就具有正确的值,但是初始化可能已被进一步向下推并且尚未执行......

如果您可以在调试版本中重现该问题,我将从那里开始。如果没有,祝你好运。不要相信你看到的任何东西,但试着从你可用的数据点中提取尽可能多的信息。

于 2013-10-22T13:37:08.417 回答
1

当您在“调试”模式下构建时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢失这些信息。但是,可以通过在项目设置中更改它来添加它。

于 2013-10-22T12:20:26.897 回答