3

我想用我的向量探索变化。因此,我想在向量大小上设置一个 whatchpoint。因此,Visual Studio 将让我在每次大小更改后查看向量中的内容。我怎么能做到这一点?

在此链接中,您可以找到如何设置条件断点。我试图设置这样的条件:my_vect.size()Has changed事件变量(根据 8. Conditional breakpoints),但它很糟糕。

4

3 回答 3

11

my_vect.size() 不是一个变量,而是一个函数。它看起来像这样:

size_type size() const _NOEXCEPT
    {   // return length of sequence
    return (this->_Mylast - this->_Myfirst);
    }

所以这里是解决方案:用调试器启动你的程序。在向量大小改变之前中断。添加一个新的数据断点。假设您的向量被称为myvec。然后在地址字段中&myvec._Mylast分别放 和&myvec._Mylast。现在,只要指向向量中第一个或最后一个元素的指针发生变化,调试器就会停止。

于 2013-01-31T08:13:42.537 回答
0

您可以打开<vector>标题并在 std::vector 的每个方法的开头(或结尾)设置一个断点,以更改向量的大小(如 push_back、erase 等)。

于 2013-01-31T07:38:39.507 回答
0

补充上面的@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
于 2021-04-14T09:06:45.003 回答