Вывод элементов std::map в отладчике

380
07 марта 2017, 16:53

Пользуюсь gdb.
Наблюдаемый субъект имеет имя m_loginIndexer.


1. Вывод print m_loginIndexer._M_t._M_impl:

(gdb) print m_loginIndexer._M_t._M_impl

$20 = {
  <std::allocator<std::_Rb_tree_node<std::pair<ent::base::CStringUtf8 const, std::unique_ptr<Poker::CInspectedPlayer, std::default_delete<Poker::CInspectedPlayer> > > > >> = {
    <__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<ent::base::CStringUtf8 const, std::unique_ptr<Poker::CInspectedPlayer, std::default_delete<Poker::CInspectedPlayer> > > > >> = {<No data fields>}, <No data fields>},
  members of std::_Rb_tree<ent::base::CStringUtf8, std::pair<ent::base::CStringUtf8 const, std::unique_ptr<Poker::CInspectedPlayer, std::default_delete<Poker::CInspectedPlayer> > >, std::_Select1st<std::pair<ent::base::CStringUtf8 const, std::unique_ptr<Poker::CInspectedPlayer, std::default_delete<Poker::CInspectedPlayer> > > >, std::less<ent::base::CStringUtf8>, std::allocator<std::pair<ent::base::CStringUtf8 const, std::unique_ptr<Poker::CInspectedPlayer, std::default_delete<Poker::CInspectedPlayer> > > > >::_Rb_tree_impl<std::less<ent::base::CStringUtf8>, true>:
  _M_key_compare = {
    <std::binary_function<ent::base::CStringUtf8, ent::base::CStringUtf8, bool>> = {<No data fields>}, <No data fields>},
  _M_header = {
    _M_color = std::_S_red,
    _M_parent = 0x2316d90,
    _M_left = 0x2316d90,
    _M_right = 0x2316d90
  },
  _M_node_count = 1
}


2. Пробую спуститься до первого элемента: (а в std::map он в данном случае один): print m_loginIndexer._M_t._M_impl._M_header._M_left

$21 = (std::_Rb_tree_node_base::_Base_ptr) 0x2316d90

Далее, рызменовываю данный указатель и получаю следующее:

$22 = {
  _M_color = std::_S_black,
  _M_parent = 0xfe94f0,
  _M_left = 0x0,
  _M_right = 0x0
}

То есть: как-бэ там ничего и нет. Но один элмент в этом мапе точно есть. Подскажите, в чем дело, или расскажите, как правильно добраться до этого элемента. P.S. Случай упрощенный - в мапе один элемент.

Answer 1

Вам нужно использовать так называемый pretty-printer для GDB. Как подключать можно посмотреть здесь: STL Support Tools. После этого STL-контейнеры будут выводиться в удобочитаемом виде.

READ ALSO
Граничные условия и вывод графика

Граничные условия и вывод графика

Продолжение этой темы Ошибки в коде при решении уравнения переноса

263
Поиск больших букв в предложении

Поиск больших букв в предложении

Всем приветКак мне в предложении "Андрусов Анатолий Никифорович пошёл выпить чай у берега Гудзона

248
Почему &ldquo;return&rdquo; не возвращает значение?

Почему “return” не возвращает значение?

Код выше определенно находит необходимый Cell (так как consolelog() выводит то, что необходимо)

258