Отладчик VS2010 неправильно отслеживает переменные в окне просмотра, VS2013 все еще имеет эту ошибку?

Отладчик Visual Studio 2010 имеет проблемы с отслеживанием местоположения переменных памяти. Иногда это может ввести вас в заблуждение, потому что VS2010 НЕ показывает переменную, которую вы думаете, она показывает вам.

Например, если вы повторно используете имя переменной внутри функции, то какая ячейка памяти должна отображаться в окне наблюдения ИЗМЕНЕНИЯ при изменении области выполнения:

for (int i=0; i<10; i++) {
i=i+1; // do something, what isn't important
}

int i;
for (i=0; i<5; i++) {
i=i+1; // do something
}

printf("i=%d\n", i);

Теперь поместите переменную i в окно просмотра.

Очевидно, что значение i (или значение) отображается в окне просмотра. Если вы запустите программу, то увидите, что когда она входит в цикл for, часы отслеживают переменную i цикла for. Когда он выходит из цикла for, а затем нажимает на приведенный ниже код с другой переменной с тем же именем, окно наблюдения не отслеживает память этой переменной.

Вы увидите окно наблюдения, все еще заявляющее, что я равен 10, хотя во 2-м цикле я теперь равен 0,1,2, … и после 2-го цикла я на самом деле равен 6, но окно наблюдения по-прежнему объявляет, что я равен 10.

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

Его ошибка в функциональности окна часы отладчика здесь (VS2010, кажется, дешевле просто найти первую переменную в функции, которая совпадает с именем вы дали его в часы, и упорно смотреть, что пространство памяти, независимо от того, что еще может быть в коде , даже если новая переменная с тем же именем перешла в область видимости (в этот момент окно наблюдения теперь лежит на вас!)

Пока я на VS2010, и мне нужно остаться там, и MSFT не устранит ошибку в старых версиях, я хотел бы знать, существует ли эта ошибка в VS2013. Возможно, я скоро смогу установить VS2013 параллельно, но стоит указать, чтобы другие не вводили в заблуждение тем, что в окне наблюдения указано значение переменной. (что еще хуже, когда вы наводите курсор мыши на имя переменной в коде отладчика, это неправильное значение отображается как «подсказка»).

1

Решение

У меня одна и та же проблема несколько раз на VS 2013 🙁

Вы всегда можете открыть окно дизассемблирования и проверить, что действительно увеличивает программа. Вы должны увидеть, является ли это адресом стека (скорее всего, в режиме отладки) или регистром.

Вы можете сбросить значение регистра в непосредственном окне или непосредственно в окне просмотра. То же самое с адресом стека. Просто введите то, что вы видите в окне разборки. Например:

00DC4095  mov         eax,dword ptr [i]
00DC4098  add         eax,1
00DC409B  mov         dword ptr [i],eax

перерыв в 00DC409B и дамп eax.

1

Другие решения


По вопросам рекламы [email protected]