2010-03-30 56 views
2

我正在使用調試器查看變量。在調試版本中,下面代碼中的所有內容都按我的預期顯示,但是當我切換到發佈版本時,我收到了奇怪的結果。爲什麼?在調試器中查看調試和釋放之間的區別

#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; 
} 

感謝您的幫助。

+2

真正的問題是您如何調用程序?因爲ARGC應該包含在命令行中傳遞的程序參數所以如果沒有它... – 2010-03-30 15:14:35

+0

請張貼有代表性的樣本,顯示您的問題,實際上編譯 - 你當前的例子需要一個「#包括」但除此之外,看起來不錯。 – 2010-03-30 15:15:13

+0

@Matthieu M.我從Visual Studio調用這個程序 – 2010-03-30 15:16:58

回答

2

既然你不使用你的程序的參數,你必須試圖觀察調試他們的價值觀。但是,由於您沒有在程序中使用它們,因此編譯器可以隨意對其值進行任何操作。它可能會完全刪除它們,只有當您詢問每個參數的值時,調試器纔會顯示亂碼。如果您更改優化和調試信息設置,則可能會看到不同的結果。

2

結果在發佈和調試模式下都是正確的。

當您在一個優化的建立查看調試器中的變量,你不能指望他們舉行了「正確的價值觀。在這種情況下,您的編譯器已將argcargv的任何跟蹤從say_hello進行了優化,因爲它們未被使用。