Установить Visual Studio (условную) точку останова на значение локальной переменной - PullRequest
2 голосов
/ 28 октября 2009

Я пытаюсь отладить метод, который, помимо прочего, добавляет элементы в список, который является локальным для метода.

Однако, очень часто размер списка устанавливается равным нулю "midstream". Я хотел бы настроить отладчик на прерывание, когда размер списка становится равным нулю, но я не знаю, как это сделать, и буду признателен за любые указания о том, как это сделать.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 28 октября 2009

Почему бы не использовать условные контрольные точки?

http://blogs.msdn.com/saraford/archive/2008/06/17/did-you-know-you-can-set-conditional-breakpoints-239.aspx

3 голосов
/ 28 октября 2009

в C #

if(theList.Count == 0){
  //do something meaningless here .e.g.
  int i = 1; //  << set your breakpoint here
}

в VB.NET

If theList.Count = 0 Then
  'do something meaningless here .e.g.
  Dim i = 1; '  << set your breakpoint here
End If

Для полноты, вот версия C ++:

if(theList->Count == 0){
  //do something meaningless here .e.g.
  int i = 1; //  << set your breakpoint here
}
0 голосов
/ 28 октября 2009

Вы уже предложили оба основных варианта: 1. Условные точки останова 2. Код для проверки неправильного значения и с точкой останова, если так происходит

Первый вариант самый простой и лучший, но, к сожалению, на больших циклах он очень медленный! Если вы зациклите сотни тысяч итераций, единственным реальным вариантом будет №2. В варианте # 1 процессор прерывает отладчик на каждой итерации, затем он оценивает условие и, если условие прерывания ложно, он просто продолжает выполнение программы. Это происходит медленно, когда это происходит тысячи раз, на самом деле это медленно, если вы зацикливаетесь всего 1000 раз (в зависимости от оборудования, конечно)

Как я подозреваю, вам действительно нужно "глобальное" условие точки останова, которое должно нарушать программу, если выполняется определенное условие (размер массива == 0), к сожалению, такого, насколько мне известно, не существует. Я сделал функцию отладки, которая проверяет условие, и если оно истинно, оно делает что-то бессмысленное, если у меня установлена ​​точка останова (т. Е. Вариант 2), тогда я часто вызываю эту функцию там, где подозреваю, что исходный сбой. Когда система сломается, вы можете использовать стек вызовов для определения ошибочного местоположения.

0 голосов
/ 28 октября 2009

Я могу дать частичный ответ для Visual Studio 2005. Если вы откроете окно «Точки останова» (Alt + F9), вы получите список точек останова. Щелкните правой кнопкой мыши нужную точку останова и выберите «Условие». Затем поставьте в нужное вам состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...