我想用我的向量探索变化。因此,我想在向量大小上设置一个 whatchpoint。因此,Visual Studio 将让我在每次大小更改后查看向量中的内容。我怎么能做到这一点?
在此链接中,您可以找到如何设置条件断点。我试图设置这样的条件:my_vect.size()Has changed
事件变量(根据 8. Conditional breakpoints),但它很糟糕。
my_vect.size() 不是一个变量,而是一个函数。它看起来像这样:
size_type size() const _NOEXCEPT
{ // return length of sequence
return (this->_Mylast - this->_Myfirst);
}
所以这里是解决方案:用调试器启动你的程序。在向量大小改变之前中断。添加一个新的数据断点。假设您的向量被称为myvec
。然后在地址字段中&myvec._Mylast
分别放 和&myvec._Mylast
。现在,只要指向向量中第一个或最后一个元素的指针发生变化,调试器就会停止。
您可以打开<vector>
标题并在 std::vector 的每个方法的开头(或结尾)设置一个断点,以更改向量的大小(如 push_back、erase 等)。
补充上面的@Marius Bancila 答案,在我的例子中,std::vector
实现更加复杂,它的size
实现是:
_NODISCARD size_type size() const noexcept {
auto& _My_data = _Mypair._Myval2;
return static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst);
}
我怀疑它在最新版本的 Visual Studio 中已更改,因为我使用的是 Visual C++ 2019 编译工具包。
所以要看:
第一的:
yourVector._Mypair._Myval2._Myfirst
最后的:
yourVector._Mypair._Myval2._Mylast