如何在vs2010的调试模式下查看boost:unordered_map中的值

时间:2011-08-31 02:09:08

标签: visual-studio-2010 unordered-map

我有以下代码......

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

如您所见,地图的值是指针。如何在地图中获取值。如果我使用(*(ret[int]))[int],我似乎无法获得价值。我做错了什么?

3 个答案:

答案 0 :(得分:4)

文件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))
}

您可以为boost unordered_map编写自己的描述,也可以为其他人编写自己的描述。看看https://svn.boost.org/trac/boost/ticket/4209(这似乎是你需要的东西)。

答案 1 :(得分:1)

我遇到了同样的麻烦,去查看Boost Ticket #4209建议的修复是否有效,哪些没有。我可以看到元素的总数,但不能看到内容。

因此,选择是切换到VS2012,其中有Plug-In,或者投资计算VS2010中的格式并修复现有的建议代码。

或者,这就是我所做的,而是使用std :: tr1 :: unordered_set / map。 Visual Studio中有一个可视化工具。然后,在调试之后,如果您愿意,可以切换回boost。

答案 2 :(得分:0)

使用文本编辑器打开文件autoexp.dat。 您通常可以在以下网址找到它:

  

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

将以下代码添加到[Visualizer]部分。应在另一个可视化工具的定义之后添加此代码。

;------------------------------------------------------------------------------
;  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。