Как установить точку останова для увеличения длины вектора <int>? - PullRequest
5 голосов
/ 08 июля 2011

У меня есть пустой вектор, что-то его заполняет, и я не могу его найти.Я хочу установить точку останова памяти, чтобы при возникновении push_back программа прервалась.

Я использую Visual Studio 2008, и проблема в том, что вектор не отображает свои внутренние элементы в окне просмотра (кажется, что он имеет пользовательское форматирование).Это просто выглядит так:

myVector [0] () std :: vector >

с указанием размера 0. Любые советы?

Ответы [ 2 ]

5 голосов
/ 08 июля 2011

Этот ответ для VS 2010 - детали могут отличаться в других версиях.

Так как отладчик использует визуализатор данных (или как он там называется) для отображения состояния std::vector, вам нужно заглянуть в заголовок <vector>, чтобы определить имена фактических членов класса и какой из них может быть ответственным за отслеживание количества элементов. Самый простой способ сделать это - пройти по номеру vector::push_back().

В VC ++ 2010 это указатель члена с именем _Mylast.

Таким образом, все, что вам нужно сделать, это установить точку останова данных при записи в &v._Mylast (где v - это вектор, который вас интересует в отладке).

При следующем добавлении элемента отладчик прервется со стеком вызовов, показывающим, где именно.

0 голосов
/ 08 июля 2011

Показывает 0 в VC2010, [0] указывает размер вектора, и элементы будут отображаться в ().и вы можете использовать окна вывода памяти, чтобы узнать адрес памяти.

...