2011-05-02 63 views
0
#include <iostream> 
int main() 
{ 
    int* a = new int[15]; 
    a[0] = 42; 
    a[1] = 43; 
    std::cerr << a[0]; 

    return 0; 
} 

gdb說a = 0xffffffff和'print a [0]'給'不能訪問內存地址',但爲什麼?如果在gdb之外運行,程序按預期輸出'42'。這裏發生了什麼?用'g ++ test2.cpp -gstabs + -O0 -o test2'編譯。gdb在簡單程序中報告錯誤的值。爲什麼?

+0

你用'-g'試過了嗎? – 2011-05-02 21:17:17

+2

你確定你在'new'被調用之前沒有嘗試訪問'a'嗎? – rlibby 2011-05-02 21:20:26

回答

1

你在哪個平臺上? gstabs +調試器格式並不普遍支持,如果你想使用它,你必須熟悉COFF,DWARF 2和其他一些我從未聽說過的exe/debug格式之間的迷人差異。底線 - 閱讀gdb手冊。但是如果你簡單地使用-g標誌,你的代碼幾乎肯定會正常工作。

+0

當我在調試C++程序時遇到問題時,我開始使用stabs +幾年前的版本。我嘗試了所有的格式和刺傷+是當時唯一正確運行的格式。從那以後,我就一直堅持下去,這是我遇到的第一個問題。 – 2011-05-04 11:29:57

0

是的,我可以重現,但只有-gstabs+

所以:你爲什麼要使用-gstabs+

這聽起來不公平,但它是一個誠實的問題,刺激+'正常'的調試信息會帶來什麼好處?

相關問題