C++ VS2015 C++;调试器在读取结构时会产生异常结果

C++ VS2015 C++;调试器在读取结构时会产生异常结果,c++,visual-studio,C++,Visual Studio,调试时,我在下面的示例中迭代“test”函数时发现了以下奇怪的结果: 最终结果正确显示为1。值仅在“测试”功能内不正确。有人能解释一下吗 它肯定与调试x64版本有关,x86没有这个问题。我尝试将上面的结构对齐到4个字节,并添加了一些填充,但两者都没有区别 最低限度的示例代码,在(x64)上编译: 供日后参考, 正如Hans Passant在评论中提到的,通过启用工具->选项->调试->常规中的“使用本机兼容模式”选项,可以解决这个问题 这是版本还是调试生成模式?调试版本,后期编辑。由于在该行之

调试时,我在下面的示例中迭代“test”函数时发现了以下奇怪的结果:

最终结果正确显示为1。值仅在“测试”功能内不正确。有人能解释一下吗

它肯定与调试x64版本有关,x86没有这个问题。我尝试将上面的结构对齐到4个字节,并添加了一些填充,但两者都没有区别

最低限度的示例代码,在(x64)上编译:

供日后参考,


正如Hans Passant在评论中提到的,通过启用工具->选项->调试->常规中的“使用本机兼容模式”选项,可以解决这个问题

这是版本还是调试生成模式?调试版本,后期编辑。由于在该行之后没有使用
f
,编译器可能已经用其他内容覆盖了它。将测试函数更改为:float test(float3 f){float x=f.x;float3 a=f;float y=a.x+f.y;return f.x;}将包括f,但是没有改变结果。我看到了,VS2015中的新调试引擎是一个坏包。解决方法是工具>选项>调试>常规>勾选“使用托管兼容性模式”复选框。您可以在connect.microsoft.com上报告此错误
#include "stdafx.h"

struct float3
{
    float3(float a, float b, float c) : x(a), y(b), z(c) {}
    float x, y, z;
};

float test(float3 f)
{
    float x = f.x;
    return f.x; // Breakpoint here shows the results from image
}

int main()
{
    float3 a = float3(1.0f, 2.0f, 3.0f);
    float x = test(a);
    printf("%f %f", x, a.x);
}