2009-04-18 62 views
3

我不知道如何解释我看到的行为,但是这里就是了。MS编译器优化,替代函数中的变量?

我有一个函数foo需要三个参数,一个指针,一个int和另一个指针。当我在foo内部突破时,我可以清楚地看到所有变量都是他们应该的值。但是,当我跨越局部变量声明时,其中一个参数(int)突然变为零。但是,函数的其余部分就像它是原始值一样执行,所以一切都很好。

这不会发生在完全调试中,但确实发生在常规调试中。这是一种优化吗?如果是这样,那叫什么,我在哪里可以得到细节?

例子:

void foo(void *A, int B, void *C) 
{ 
    // B == 5 
    int X = 3; 
    char *Y = getSomeStaticString(); 
    // ... some other variable declarations like the above 

    // B, according to the debugger, is now 0 
    if (B == 5) { 
    // But this still executes 
    } 
} 

回答