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”编译。
#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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你在哪个平台? 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.
是的,我可以重现这一点,但只能使用
-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?