Как увидеть значения в boost: unordered_map в режиме отладки с vs2010 - PullRequest
2 голосов
/ 31 августа 2011

У меня есть следующий код ...

typedef boost::unordered_map<int, boost::unordered_map<int, float>* > User_item_rating_map;

Как видите, значением карты является указатель. Как я могу получить значение на карте. Если я использую (*(ret[int]))[int], я не могу получить значение. Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 31 августа 2011

Файл AUTOEXP.DAT - это файл, который сообщает Visual Studio, как представлять структуры данных в отладчике.

Некоторые описания могут быть довольно простыми, например, для CSize:

CSize =cx=<cx> cy=<cy>

Но они также могут быть очень сложными, как этот для bitset:

std::bitset<*>{
    preview
    (
        #(
        "[",
            $c.digits,
        "](",
        #array
        (
            expr :  ($c._Array[$i / $c._Bitsperword] >> ($i % $c._Bitsperword)),
            size :  $c.digits
        ) : [($e & 1),d],
        ")"
        )
    )
    children
    (
        #array
        (
            expr :  ($c._Array[$i / $c._Bitsperword] >> ($i % $c._Bitsperword)),
            size :  $c.digits
        ) : (bool)($e & 1))
}

Вы можете написать собственное описание для надстройки unordered_map, или, возможно, кто-то другой уже сделал это для вас. Взгляните на https://svn.boost.org/trac/boost/ticket/4209 (это похоже на то, что вам нужно).

1 голос
/ 08 мая 2013

У меня была такая же проблема, я посмотрел, сработало ли предложенное исправление из Boost Ticket # 4209 , но это не сработало. Я мог видеть общее количество элементов, но не содержимое.

Итак, вы можете переключиться на VS2012, для которого есть Plug-In , или инвестировать в выяснение формата в VS2010 и исправление существующего предложенного кода.

Или, и это то, что я сделал, вместо этого используйте std :: tr1 :: unordered_set / map. В Visual Studio для этого есть визуализатор. И позже, после отладки, если хотите, переключитесь обратно на boost.

0 голосов
/ 07 июля 2016

Откройте ваш файл autoexp.dat в текстовом редакторе. Вы обычно находите это в:

C: \ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ Packages \ Debugger \ autoexp.dat

Добавьте следующий код в раздел [Визуализатор]. Этот код следует добавить после определения другого визуализатора.

;------------------------------------------------------------------------------
;  boost unordered collections
;------------------------------------------------------------------------------
boost::unordered::unordered_map<*,*,*,*,*>{
    preview (
    #(
        "[",
        $e.table_.size_,
        "](",
        #list(
            head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
            size: $e.table_.size_,
            next: next_
        ) : #(*((std::pair<$T1 const ,$T2>*)&(*(boost::unordered::detail::ptr_node<std::pair<$T1 const ,$T2> > *)(&$e)).value_base_)),
        ")"
    ))
    children(
    #(
        size: ($e.table_.size_),
        #list(
            head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
            size: $e.table_.size_,
            next: next_
        ) : #(*((std::pair<$T1 const ,$T2>*)&(*(boost::unordered::detail::ptr_node<std::pair<$T1 const ,$T2> > *)(&$e)).value_base_)),
    ))
}


boost::unordered::unordered_set<*,*,*,*>{
    preview (
    #(
        "[",
        $e.table_.size_,
        "](",
        #list(
            head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
            size: $e.table_.size_,
            next: next_
        ) : #(*(($T1*)&((*(boost::unordered::detail::ptr_node<$T1>*)(&$e)).value_base_))),
        ")"
    ))
    children(
    #(
        size: ($e.table_.size_),
        #list(
            head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
            size: $e.table_.size_,
            next: next_
        ) : #(*(($T1*)&((*(boost::unordered::detail::ptr_node<$T1>*)(&$e)).value_base_))),
    ))
}

Например, я добавил его перед строками

;------------------------------------------------------------------------------
;  std::plus, etc. from <functional>
;------------------------------------------------------------------------------

На следующем сеансе отладки это должно сработать.

Я протестировал его с Microsoft Visual Studio 2010 версии 10.0.40219.1 SP1Rel и установил версию 1.61.0.

...