I did not do much C++ debugging in gdb, so these are probably all well known issues.
The problem with your watchpoint seems to be caused by gdb's inability to actually execute some methods, like [] operator or at() method. You can try this by just giving print myvec.at(0). It looks like this test is missing from watchpoint code, and it freezes the gdb. (It's probably known gdb bug, but I'll check.)
Now for the workaround. You can access n-th element of the vector using:
(MyClass*)(myvec._M_impl._M_start+n)
For sizeDesired that would then be:
(((MyClass*)(myvec._M_impl._M_start+n))->sizeDesired)
Adding a watchpoint to this expression still freezes gdb for some reason. But print works, so if you do something like:
print &(((MyClass*)(myvec._M_impl._M_start+3))->sizeDesired)
You will get pointer to the field you want to watch. Something like this will get printed out: $1 = (int *) 0x40508c Now issue:
watch *((int*)0x40508c)
continue
Hardware access (read/write) watchpoint 3: ((int)0x40508c) ...
BTW: Ideas how to print std containers were snitched from http://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb.