2009-04-18 60 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 
    } 
} 

回答