通过 Visual Studio 进行 C++ 调试 - 矢量大小变化的观察点

问题描述 投票:0回答:3

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

在此链接中您可以找到如何设置条件断点。我尝试设置这样的条件: my_vect.size() 变量在

Has changed
事件上(根据 8. 条件断点),但它很糟糕。

c++ visual-studio debugging vector size
3个回答
11
投票

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

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

解决方案如下:使用调试器启动程序。在矢量大小改变之前中断。添加新数据断点。假设你的向量称为

myvec
。然后在地址字段中输入
&myvec._Myfirst
并使用
&myvec._Mylast
添加另一个断点。现在,只要指向向量中第一个或最后一个元素的指针发生变化,调试器就会停止。


1
投票

补充上面@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

0
投票

您可以打开

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

© www.soinside.com 2019 - 2024. All rights reserved.