gdb在简单程序中报告错误的值。为什么?

时间:2011-05-02 21:13:24

标签: c++ gdb

#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'编译。

2 个答案:

答案 0 :(得分:1)

你在哪个平台上? gstabs +调试器格式不是普遍支持的,如果你想使用它,你必须熟悉COFF,DWARF 2和我从未听说过的其他一些exe / debug格式之间的迷人差异。底线 - 阅读gdb手册。但是如果你只使用-g标志,你的代码几乎肯定会正常工作。

答案 1 :(得分:0)

是的,我可以重现,但只能使用-gstabs+

那么:你为什么要使用-gstabs+

这听起来不公平,但这是一个诚实的问题,刺入什么优势+带来'正常'调试信息?