在调试器中观察向量元素的简单方法

时间:2014-08-11 18:56:53

标签: c++ visual-studio debugging visual-c++ stdvector

我使用的是Visual Studio 2013,在其悠久的历史中,它永远无法在调试器中显示向量元素,抱怨no operator "[]" matches these operands消息。我知道有一个解决方法需要输入v.operator[](n),但这对我来说是不可接受的。我想将光标悬停在v[n]上方并查看其值,或者最多选择或剪切并粘贴v[n]以查看值。是否可以使用其他Windows C ++ IDE?

我知道向量的所有元素都显示在AutosLocals窗口中,但我的向量太长,不适合实用。

4 个答案:

答案 0 :(得分:5)

只需在Watch区域中为每个[]添加前缀_Myfirst

YourVector._Myfirst[n]

答案 1 :(得分:2)

欺骗:

假设您有std::vector<int> v;,并希望在观看v[23]v[23]..v[23+n]中看到这样做:

  1. 将变量添加到监视窗口。
  2. 在变量名称后添加,!(例如:v,!),这表示要关闭调试器可视化的VS.
  3. 展开向量成员,直至看到_Myfirst_Mylast_Myend。将_Myfirst添加到手表中。这是指向向量存储器开头的指针。
  4. 如果需要,请从手表中删除v,!
  5. 添加到监视的_Myfirst元素添加到结尾+ offset, count,其中offset是您希望在监视中首先看到的向量索引,count是您想要的向量元素的数量看到。会是这样的:(*((std::_Vector_val<std::_Simple_types<int> >*)(&(*((std::_Vector_alloc<0,std::_Vec_base_types<int,std::allocator<int> > >*)(&(v)))))))._Myfirst + 23, 100。这让你可以看到从位置23开始的向量的100个元素(是的,我知道它是_Myfirst元素的大)。您可以使用变量指定offsetcount(例如:匹配代码中的表达式,如v[n]用作偏移ncount,无论您想要什么,常数或变量。
  6. 从第17分钟开始,Debugging Tips and TricksGoing Native Episode 28的一些信息有一些好处,评估表达式可以在评论中。例如你有一些代码。

    v[n] = ... + pre_calculate(v[n]) + ...
    // You could put a comment like this:
    // (*((std::_Vector_val<std::_Simple_types<int> >*)(&(*((std::_Vector_alloc<0,std::_Vec_base_types<int,std::allocator<int> > >*)(&(v)))))))._Myfirst + n, 100
    // And when you hover the mouse over the selected expression, you see the evaluation. Much better I think.
    

答案 2 :(得分:0)

在MSVC的标准库实现中,_M_start_M_finish_M_end_of_storage_Vector_base中可以使用的公共成员。

vector._M_start[n]

答案 3 :(得分:0)

此方法将对您使用的任何C ++ IDE有效;首先,您必须知道存储第一个元素的向量成员名称。

(在borland 6 c ++中),您可以通过在已经将其添加到watchs窗口中之后检查向量来执行此操作。在Visual中,它称为“不同”。

然后,您必须在手表中添加以下语法: nameVector.memberWichPointsToTheFirstElement [startIndex],numElementsDesiredToDisplay。

您完成了。但是当向量在实例内部时,它不会显示任何内容:不允许出现副作用。