只有在优化期间才会显示的问题通常指示由优化暴露出来的逻辑错误或编译错误,例如,使用尚未初始化的变量。如果您在程序中遇到了只在优化版本中出现的错误,则通常可以通过使用二进制搜索技术查找出现故障的模块来找出发生错误的原因:
当调试已优化的代码时,调试器视图中的信息可能会导致您怀疑发生了实际上不存在的逻辑问题。请考虑以下几点:
不要依赖变量视图来显示变量的当前值。数值、字符值和指针可能保留在处理器寄存器中。在已优化的程序中,这些值和指针并不会始终写出到内存中;在某些情况下,可能会因为不需要它们而废弃它们。
在已优化的函数中,静态变量或外部变量的值并不始终写出到内存中。但是,静态变量在函数入口点/出口点中通常是正确的。
寄存器和内存视图是正确的。与显示实际变量的监视器(例如,变量视图)不同,自从上次停止执行以来,寄存器和内存视图始终是最新的。
当使用反汇编视图或混合视图来查看程序的机器代码时,您可能会发现,例如,在源代码中对变量的赋值不会导致生成任何反汇编代码 - 这可能指示在赋值之后从未使用该变量的值。
许多优化操作将导致对生成的代码进行重新排序。对生成的代码进行重新排序之后,不会保持源代码语句顺序。