在调试器中查看时调试和发布之间的区别

时间:2010-03-30 15:13:22

标签: c++

我正在使用调试器查看变量。在调试版本中,下面代码中的所有内容都按照我的预期显示,但是当我切换到发布版本时,我会得到奇怪的结果。为什么呢?

#include <iostream>

void say_hello(int argc, char* argv[])//In release mode argc has different values from 124353625 to 36369852 when viewed in the debugger
{
    std::cout << "In say_hello()\n";
}

int main(int argc, char* argv[])
{
    say_hello(3,argv);//when instead of literal I enter "argc" everything is ok.
    return 0;
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

由于您未在程序中使用这些参数,因此必须尝试在调试器中观察它们的值。但是,再次,因为你没有在你的程序中使用它们,编译器可以随意使用它们的值做任何事情。它可能会完全删除它们,当你要求每个参数的值时,调试器只会显示乱码。如果更改优化和调试信息设置,则可能会看到不同的结果。

答案 1 :(得分:2)

程序的结果在发布和调试模式下都是正确的。

当您在优化构建中查看调试器中的变量时,您不应期望它们保持“正确”值。在这种情况下,您的编译器已优化argcargv的任何跟踪,因为它们未被使用。

答案 2 :(得分:0)

在Release版本中,代码已经过优化,许多值都保存在寄存器中。调试器不知道如何访问和显示这些值。

请参阅What does “Optimize Code” option really do in Visual Studio?