Ho cercato di eseguire il debug di un piccolo problema, e quasi sono diventato pazzo mentre cercavo di farlo. Dopo diverse ore di capire il problema, ho finalmente un frammento di codice che è la radice del mio problema:Comportamento strano di GDB
#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;
}
Con questa compilato, utilizzando:
g++ -std=c++11 -ggdb -O0 -pedantic -Wall -Wextra -Wno-nonnull -fkeep-inline-functions
Allora provo quanto segue:
(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)
Apparentemente, 4 ora è uguale a 4293588256. Che diavolo sta succedendo? Inoltre, se interrompo il programma prima che venga creato lo stack, GDB mostra correttamente le dimensioni.
MODIFICA: Sono su Windows 8.1, le versioni di roba sono: G ++ 4.8.1; GDB 7.6.1
Quale sistema operativo? Quale compilatore e versione? Quale versione di 'gdb'? –
Impossibile riprodurre con gcc4.9.2/gdb 7.8.1 (MinGW). –
Hm, quindi questo potrebbe essere un bug di GDB. Lo aggiornerò all'ultima versione e riproverò. – user1982779