2014-01-13 65 views
0

我想調試我寫的一個小C++代碼。
它有幾個功能,都在同一個C++文件,像VS 2008 C++ debug:不顯示特定函數的局部變量?

static void b(int i) { 
    int k = i * 2; 
} 
static void a(int j) { 
    for(int l = 0; l < j ; l++) { 
     b(l + j); 
    } 
} 
int main(void) { 
    a(4); 
    return 0; 
} 

我編譯在調試模式下的代碼,我把一個破發點中的功能b。 代碼編譯好,調試器在斷點處
停止,當我試圖檢查的局部變量k值我得到

CXX0017: Error: symbol "k" not found

我能看到的i值 - 輸入參數。
而且,如果我在調用堆棧點擊調用函數a我可以檢查有兩個參數變量j和局部變量l ...

有沒有人碰到過這種奇怪的情況來的?

回答

1

我明白了:我笨到足以腐蝕我的堆棧。我做得非常優雅,所以我仍然能夠看到「調用堆棧」,但關於特定幀中局部變量的信息已損壞。更謹慎和尊重地處理記憶解決了這個煩人的問題。

謝謝John爲您的努力。

4

當您的斷點擊中並且在您有機會檢查它之前被銷燬時,可能不會構建k

嘗試在之後添加一行代碼,其中k正在被初始化,並且在那裏打破。

static void b(int i) { 
    int k = i * 2; 
    bool bk = true; // <== BREAKPOINT HERE 
} 
+0

John,謝謝你的回答,但情況要複雜得多。我的代碼自然比我發佈的樣本更復雜,僅用於說明目的。我有很多局部變量** all **未在調試中顯示。這不是我第一次在VS中調試,這是我從來沒有遇到過的。很奇怪。不管怎麼說,還是要謝謝你。 – Shai

+0

@Shai:你是不是在發佈模式下構建的?您是否在調試模式下啓用了優化? –

+0

我想我知道了 - 我損壞了我的堆棧... – Shai