I just noticed that GDB has this bug: (the reasons are also shown in this bug report)
Bug 15559 – Method call and calling convention (https://sourceware.org/bugzilla/show_bug.cgi?id=15559)
This prevent you using a "inferior call" on the GDB, such as "p v[0]" or "p v.size()".
Test sample code below:
#include <string>
#include <vector>
int fff()
{
return 3;
}
int main()
{
std::vector<std::string> v;
v.push_back("a");
v.push_back("b");
std::string abc = v[0];
abc.c_str();
abc.size();
int i = v.size();
i++;
i = fff();
return 0;
}
If you set a breakpoint in the "return 0" line, then you try to see watch some values like "v[0]" or "v[1]", also you can enter "p abc.size()", "p abc.c_str()", "p v[0]", you will get wrong result or error in GDB.
GCC 4.6.x and earlier version don't cause such issue.