As noted by Nick, my varobj laziness patch has broken C++ references updates -- now -var-update does not detect the situation when a reference variable just got initialized, for example: int x = 4; int &rx = x; after executing the second line, -var-update does not say that varobj corresponding to rx has change. References were already broken, in a different way, before my change -- -var-update would always list reference variable as changed. That was because gdb was comparing undereferenced old value with dereferenced new value -- that obviously never compare equal. Also, display of references includes the address, like this: -var-evaluate-expression var1 ^done,value="@0xbff72ebc: 4" We discussed this at length some time ago: http://thread.gmane.org/gmane.comp.gdb.patches/28414/ The conclusion was that this "address prefix" is not necessary. In fact, both KDevelop and Eclipse explicitly remove it. Back then, it was decided that change would be hard. But recent varobj refactorings make this change straight-forward. Attached is the patch that: - Makes -var-update property report reference variables -- only when the referred-to value actually changed. - Removes the "@ADDRESS" output for reference variables. - Adds tests for references. The patch and the new files are attached. - Volodya * varobj.c (varobj_create): Don't call release_value. (varobj_set_value): Likewise. (install_new_value): Call coerce_ref and release_value on the value. Add asserts. testsuite/ * lib/mi-support.exp (mi_runto): Accept "()" after function name. (mi_create_varobj): New function. (mi_varobj_update): New function. (mi_Check_varobj_value): New function. * gdb.mi/mi-cpp.exp: New file. * gdb.mi/mi-cpp.cpp: New file.