visual studio 2017 STL 可视化器因一个 std::map<MyIntrusivePtr, std::tuple<....>> 失败

Posted

技术标签:

【中文标题】visual studio 2017 STL 可视化器因一个 std::map<MyIntrusivePtr, std::tuple<....>> 失败【英文标题】:visual studio 2017 STL visualizer fails for one std::map<MyIntrusivePtr, std::tuple<....> > 【发布时间】:2018-05-31 17:28:35 【问题描述】:

所有 Visual Studio 监视窗口正在显示:

std::_Tree<std::_TMap_traits<.....

所有其他数据都可以正常显示 -- 使用相同或相似的数据。

这是标题:

typedef std::set<expression::ptr> expressionSet;
//pairOfExpression2Usage m_sBool;
typedef boost::flyweights::flyweight<
    expressionSet,
    boost::flyweights::set_factory<>,
    boost::flyweights::refcounted
> expressionSetFW;
typedef std::pair<expressionSetFW, expressionSetFW> pairOfExpressionSetFW;
    // these are or-ed together
struct comparePairOfExpressionSetFW
   bool operator()(
        const pairOfExpressionSetFW &_r0,
        const pairOfExpressionSetFW&_r1) const;
;
typedef std::set<
    pairOfExpressionSetFW,
    comparePairOfExpressionSetFW
> setOfPairOfExpressionSet;
struct compareSetOfPairOfExpressionSet
   bool operator()(
        const setOfPairOfExpressionSet &_r0,
        const setOfPairOfExpressionSet&_r1) const;
;
typedef boost::flyweights::flyweight<
    setOfPairOfExpressionSet,
    boost::flyweights::set_factory<compareSetOfPairOfExpressionSet>,
    boost::flyweights::refcounted
> setOfPairOfExpressionSetFW;
typedef std::tuple<std::size_t, double, setOfPairOfExpressionSetFW> exprData;
typedef std::map<expression::ptr, exprData> expr2Data;

我已经重新安装了可视化工具。有没有

devenv.exe /resetsettings

将 typedef 放入全局范围。 奇怪的是,所有其他东西(也使用表达式::ptr)作为索引或数据都显示正常。

【问题讨论】:

【参考方案1】:

我为解决这个问题所做的就是复制转换攻击性

std::map<> 

变成一个

std::map<std::string, std::string>

只是为了能够在调试器中查看它。 其他 std::map 也会出现此问题。我真的很想知道,是什么触发了这种行为。

【讨论】:

以上是关于visual studio 2017 STL 可视化器因一个 std::map<MyIntrusivePtr, std::tuple<....>> 失败的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio怎么翻译?

Visual Studio 2019 STL 包含错误

在 Visual Studio 中编写 MFC/STL 程序需要做啥?

Visual Studio stl 数字实现中的双标头保护

在 Visual Studio 调试模式下“浅”显示 STL 容器?

在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?