Consider this test: namespace A { namespace B { namespace C { int x = 5; int nsfunc () { return x; } } } } namespace Q = A::B; int xfun() { return Q::C::x; // Breakpoint xfun } using namespace Q::C; int yfun() { return x; // Breakpoint yfun } int main(){ return xfun() + yfun(); } If you break in "main", then "break Q::C::nsfunc" should work. However, it does not.
This looks the same as the comment 5 of the duplicated bug (though an argument *could* be made that that should have been a separate bug). *** This bug has been marked as a duplicate of bug 7935 ***
Actually, this is a different problem than 7935. Tom wrote "break Q::C::nsfunc" should work -- and it does work with my (recently submitted) patch for 7935. However, I think what he meant to write is "break nsfunc" should work when stopped in main, since we have imported Q::C. That does not currently work (and my patch does not address this separate issue). Reading symbols from 13384...done. (gdb) start Temporary breakpoint 1 at 0x4005d5: file 13384.cc, line 26. Starting program: 13384 Temporary breakpoint 1, main () at 13384.cc:26 26 return xfun() + yfun() + nsfunc(); (gdb) b Q::C::nsfunc Breakpoint 2 at 0x4005b0: file 13384.cc, line 7. (gdb) b nsfunc Function "nsfunc" not defined. Make breakpoint pending on future shared library load? (y or [n]) n find_linespec_symbols and everything below it know nothing about imported namespaces.
"b Q::C::nsfunc" doesn't work, but "Q::C::nsfunc()" does: ``` (gdb) b Q::C::nsfunc Function "Q::C::nsfunc" not defined. Make breakpoint pending on future shared library load? (y or [n]) n (gdb) b Q::C::nsfunc() Breakpoint 2 at 0x13f5f1604: file gdb-13384.cpp, line 7, column 9. ```