在 VS 调试器中查看映射条目

Posted

技术标签:

【中文标题】在 VS 调试器中查看映射条目【英文标题】:Watching map entries in VS debugger 【发布时间】:2018-10-30 21:41:04 【问题描述】:

我想知道这是否是我的错误/误解(很可能)或其他原因。

我在 VS 2017 社区中有以下代码:

#include <map>

int main()

    std::map<int, int> myMap;
    myMap[1] = 4;
    myMap[4] = 2;
    return 0;

现在,当我调试时,我想尝试查看我得到的地图的某些条目

    myMap[1]    no operator "[]" matches these operands

为什么会这样?我不确定。

【问题讨论】:

您是否正在调试优化的构建?调试优化代码通常会令人惊讶,因为生成的代码可能与原始 C++相当不同,而且许多东西可以被优化掉并切换。尝试调试版本。 它在调试配置中 人们是否可以至少评论一下为什么? 赌的是那些不明白你在问什么的人。我明白了。看来 Jesper 和 Caleth 明白了。而且看起来 Caleth 打字的速度比我快。 【参考方案1】:

调试器将myMap 视为const。这是为了阻止你改变状态来观察它。

[] 的两个重载是

T& operator[]( const Key& key );
T& operator[]( Key&& key );

它们都不能在 const map 上调用,因为它们会插入一个默认构造条目以在 key 不存在时返回。

您可以改用at,如果key 不存在则抛出,因此有const 限定的重载

const T& at( const Key& key ) const;

【讨论】:

【参考方案2】:

在这里,您已将地图的名称声明为“map”。因为地图对象类型已经使用了名称“地图”,所以不能以这种方式使用它。

如果您将地图名称更改为其他名称,例如

std::map<int, int> myMap

并使用该名称而不是单词“map”来调用它,您应该会看到您所期望的行为

【讨论】:

这没什么区别 std::mapmap 是不同的野兽。

以上是关于在 VS 调试器中查看映射条目的主要内容,如果未能解决你的问题,请参考以下文章

VS2015--在 Visual Studio 中调试时映射调用堆栈上的方法

请问VS2010中,如何查看调试过程中函数的返回值?

VS 怎么进行断点调试?

vs2010调试怎么查看变量

C语言中怎样在调试中查看变量的值

vs2012调试时怎么查看堆中的数据(动态数组)? 求详细解答。 用的c++