[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gdb Q.: where do we stand regarding STL debugging?

On Tue, Mar 11, 2008 at 12:35:46AM -0400, "H.S." <hs.samix@gmail.com> was heard to say:
> Just wanted to see if somebody could share some information about where  
> we are regarding debugging programs which use STL.
> For example, I am not sure how I can print out the values of a two  
> dimensional vector (vector of a vector) in gdb.

  So, this isn't pretty.  But you can examine the values of a vector in
gdb.  If you print a vector you'll see something like this:

(gdb) print matchers
$10 = {<std::_Vector_base<aptitude::matching::pkg_matcher*,std::allocator<aptitude::matching::pkg_matcher*> >> = {
    _M_impl = {<std::allocator<aptitude::matching::pkg_matcher*>> = {<__gnu_cxx::new_allocator<aptitude::matching::pkg_matcher*>> = {<No data fields>}, <No data fields>}, _M_start = 0x832e4d8, _M_finish = 0x832e4e4, 
      _M_end_of_storage = 0x832e4e8}}, <No data fields>}

  Here _M_start is matchers.begin(), _M_finish is matchers.end(), and I
think _M_end_of_storage is the end of the allocated space.

  Luckily, gdb knows how to dispatch .size(), so you can do this to
print a vector:

(gdb) print matchers._M_impl._M_start@matchers.size()
$9 = {0x832e4d8, 0x832e4e4, 0x832e4e8}

  TBH, though, I think printf statements are more useful.


  PS: Please don't ask me about std::sets. ;-)

Reply to: