Избегайте выхода из блока в Visual C ++ 2008 - PullRequest
3 голосов
/ 06 декабря 2011

Учитывая этот код:

std::vector<myObject*> veryLargeArray;

for (int i = 0; i < veryLargeArray.size(); ++i)
{
  param_type* currParams = veryLargeArray[i]->GetParams<param_type>();
  currParams->phi = /* some complex formula */;
}

Как бы я перешагнул этот код так, чтобы я знал, какой ответ хранится в phi до начала следующей итерации цикла, которая эффективно уничтожит currParams и, следовательно, мои шансы на просмотр его значений в отладчике?

Я слишком часто сталкиваюсь с этой ситуацией, и мое решение состоит в том, чтобы либо перекомпилировать код, поместив фиктивную переменную непосредственно перед концом блока, где я затем помещаю разрыв ИЛИ , проходящий через массив значений, которые иногда могут быть огромными, просто чтобы я мог видеть, какое значение было сохранено, или может потребоваться дополнительная работа только для преобразования сохраненного param_type в правильный объект. Оба решения не идеальны, так как первое вводит предупреждения (что рассматривается как ошибка, и в этом случае я должен установить правила для каждого файла), а также перекомпиляцию кода, чего я хотел бы избежать, в то время как второй тратит впустую. время.

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Установить точку останова на закрывающей скобке.Откройте окно точек останова (Ctrl + D, B) и в списке точек останова выберите точку останова.Щелкните правой кнопкой мыши и выберите «Условие».В диалоговом окне условий введите «i == veryLargeArray.Size () - 1».Окно диалога и F5; -)

1 голос
/ 20 января 2012

У вас может быть точка трассировки , выводящая значение phi на каждой итерации цикла. Вы даже можете комбинировать это с условиями точки останова .

0 голосов
/ 09 декабря 2011

Вы можете объявить переменную, объявленную вне цикла, чтобы сохранить ваше значение между итерациями и установить точку останова на закрывающей скобке.

std::vector<myObject*> veryLargeArray;  

int inspector; // assuming currParams->phi is int, change type accordingly
for (int i = 0; i < veryLargeArray.size(); ++i) 
{  
    param_type* currParams = veryLargeArray[i]->GetParams<param_type>();   
    currParams->phi = /* some complex formula */; 
    inspector = currParams->phi;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...