vs调试时报错:变量已被优化掉,因而不可用

前言

   使用vs运行程序时,发现不是每次运行的结果都一致,抛开多线程的因素。比方说我用openGL加载骨骼动画数据,有时候能加载出骨骼纹理,有时候就不行,很头疼,在调试问题的时候就遇见vs调试器报错:
   变量已被优化掉,因而不可用

在这里插入图片描述

解决

在vs顶部工具栏上,选择工具->属性,打开属性页,然后依次选择配置属性->C/C+±>优化,将优化栏的值选为已禁用(/Od),然后确定保存设置就可以了。如下图所示:

在这里插入图片描述
一般来说,上述设置的优化选项中,最大优化(优选速度)(/O2)是release版本的设置,它会在执行过程中对代码和变量进行优化,因此,如果在debug模式下仍使用该设置的话,那么也会和release一样,无法在调试的时候即时查看到每个变量的值。

运行结果

在这里插入图片描述

工程源码

工程源码下载

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你在编译启用了优化,那么编译器可能会将一些未使用的变量删除,以减少可执行文件的大小和提高程序的性能。如果你需要使用这些变量,可以考虑关闭优化或者在代码使用 `volatile` 关键字来防止编译器优化这些变量。另外,如果你的变量是在头文件定义的,而且没有被使用,那么你可以考虑将其从头文件删除,以减少编译间和可执行文件的大小。 ### 回答2: 当一个变量优化之后,意味着编译器或解释器在代码执行过程将其删除或不再进行相关操作。这种优化是为了提高程序的执行效率和性能。 造成变量优化的原因有很多,其可能是因为该变量在后续的代码没有被使用到,也可能是因为编译器进行了相关的静态分析,在编译阶段发现该变量的计算结果没有被使用,因此直接进行了删除。 一旦变量优化,其值将不再可用。这意味着不能在后续的代码通过该变量来获取任何数据。因此,在需要使用该变量的地方,我们需要重新考虑是否需要进行修改,以便能够获取相应的数据。 变量优化可能会引发一些问题,比如我们可能会遗漏一些重要的信息或者导致程序出现逻辑错误。因此,在代码编写过程,我们应该注意避免出现不必要的变量,同也要注意检查代码是否正确地使用了变量。 总之,当我们在代码遇到变量已被优化的情况,需要重新审视代码逻辑和目的,以确保程序的正确性和高效性。同也需要确保我们没有错过任何关键数据,以免给程序带来潜在的问题。 ### 回答3: 变量已被优化是指在编译器优化过程,编译器会对代码进行分析和优化,其一种优化方式是通过静态单赋值(SSA)形式重新组织代码,尽可能地减少变量的使用,减少内存的消耗和提升程序性能。这种优化会影响到我们在代码定义的变量的可用性。 当变量优化,意味着编译器在优化过程认为该变量没有对程序的结果产生影响,可以忽略或替换。换句话说,编译器认为程序可以在没有该变量的情况下正确运行。 这种情况可能发生在以下几种情况下: 1. 变量在定义之后没有被使用 2. 变量的值可以在编译期通过常量折叠等技术计算得出 3. 变量的值可以通过其他被优化变量计算得出 4. 变量在循环被修改,但是在循环后面没有被使用 当变量优化,我们在代码无法直接访问该变量的值,因为在编译后的可执行文件已经没有该变量的存储空间。但是这并不意味着我们无法获取到该变量的值,可以通过使用调试器来查看变量的值,或者在编译关闭优化选项来禁止编译器优化,保留变量的可用性。 尽管编译器的优化可以提高程序的性能和减少内存的使用,但是也需要我们在编写代码注意变量的使用和定义,以避免出现变量优化导致无法获取到变量值的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值