But, its "find" command is utterly broken. It reports addresses happily. They just don't have the data you're searching for! bug report here. I mean, how hard is it to screw up searching for a substring(**)?
At Kealia we got sick enough of gdb screwing up C++ stuff that we hired a consultant(***) to fix the most problematic bugs.
(*) Except that if you want to refer to the 17th element of a vector, you can't just do foo unless the program is running. And the pretty-printing has obscured the internals of the vector implementation you need to know(****) in order to access that 17th element programatically instead of counting it out on the screen.
(**) Fairly easy, I guess, when you are searching through a core file, whose layout on disk only loosely resembles its layout in the virtual address space you're searching. But c'mon.
(***) Who we then hired to work on product code, which meant that gdb work started suffering again.
(****) foo._M_impl._M_start, which I can never get right on the first try because I keep wanting to put underscores at the end of member variables, as is our coding convention.