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

发布于 2024-11-04 19:45:37 字数 294 浏览 0 评论 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”编译。

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

  return 0;
}

gdb says a = 0xffffffff and 'print a[0]' gives 'cannot access memory address' but why? If run outside of gdb, the program prints out '42' as expected. What is going on here? Compiled with 'g++ test2.cpp -gstabs+ -O0 -o test2'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自演自醉 2024-11-11 19:45:37

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

Which platform are you are on? The gstabs+ debugger format is not universally supported, if you want to use it you must acquaint yourself with the fascinating differences between COFF, DWARF 2 and probably some other exe/debug formats I've never heard of. Bottom line - read the gdb manual. But your code will almost certainly work correctly if you simply use the -g flag.

只想待在家 2024-11-11 19:45:37

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

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

这听起来不公平,但这是一个诚实的问题,stabs+ 与“正常”调试信息相比有何优势?

Yep I can reproduce that, but only with -gstabs+

So: why are you using -gstabs+?

It doesn't sound fair, but it is an honest question, what advantage does stabs+ bring over 'normal' debug info?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文