C++ GDB的怪异行为
我一直在试着调试一个小东西,在试着调试的时候差点发疯。经过几个小时的思考,我终于找到了一段代码,这是我问题的根源:C++ GDB的怪异行为,c++,gdb,C++,Gdb,我一直在试着调试一个小东西,在试着调试的时候差点发疯。经过几个小时的思考,我终于找到了一段代码,这是我问题的根源: #include <iostream> #include <vector> #include <stack> using namespace std; int main() { std::vector<int> foo = std::vector<int>(); foo.push_back(0);
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int main()
{
std::vector<int> foo = std::vector<int>();
foo.push_back(0);
foo.push_back(11);
foo.push_back(222);
foo.push_back(3333);
std::stack<int> bar = std::stack<int>();
cout << endl << foo.size() << endl << endl;
return 0;
}
然后,我尝试以下方法:
(gdb) br 18
Breakpoint 1 at 0x40170c: file ./....cpp, line 18.
(gdb) r
Starting program: ...
[New Thread 15620.0x3c3c]
Breakpoint 1, main () at ./....cpp:18
18 cout << endl << foo.size() << endl << endl;
(gdb) p foo.size()
$1 = 4293588256
(gdb) c
Continuing.
4
[Inferior 1 (process 15620) exited normally]
(gdb)
(gdb)br 18
0x40170c处的断点1:file./…cpp,第18行。
(gdb)r
正在启动程序:。。。
[新螺纹15620.0x3c3c]
断点1,main()位于../..cpp:18
18 cout证明这确实是GDB7.6.1或G++4.8.1的问题。
将GDB更新为7.8.1版,将G++更新为4.9.2版解决了问题。哪个操作系统?哪个编译器和版本?哪个版本的gdb
?无法使用gcc4.9.2/gdb7.8.1(MinGW).Hm复制,因此这很可能是gdb的一个bug。我会将其更新到最新版本,然后重试。在创建之前,它怎么可能正确显示大小?或者你是说在创建另一个堆栈之前?你是什么意思,在它被创建之前?我想知道向量的大小。如果我在创建堆栈之前这样做,就可以了。如果我在得到那个奇怪的数字后再做。接受这个答案作为解决方案,如果这解决了问题。@gustaf,他还不能。别急!两个原始版本的新安装如何?这似乎是GDB从错误版本的libstdc++中读取符号。@LightnessRacesinOrbit最新版本的新安装基本上就是我最后所做的。我在让mingw更新到最新版本时遇到问题。对不起,如果我的措辞把你弄糊涂了。@user1982779:不,我说的是两个原始版本的新安装。
(gdb) br 18
Breakpoint 1 at 0x40170c: file ./....cpp, line 18.
(gdb) r
Starting program: ...
[New Thread 15620.0x3c3c]
Breakpoint 1, main () at ./....cpp:18
18 cout << endl << foo.size() << endl << endl;
(gdb) p foo.size()
$1 = 4293588256
(gdb) c
Continuing.
4
[Inferior 1 (process 15620) exited normally]
(gdb)