2011-05-02 29 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+

这听起来不公平,但它是一个诚实的问题,刺激+'正常'的调试信息会带来什么好处?

相关问题