2009-06-01 2 views
1

Я отлаживаю часть большого проекта в Visual Studio 2005 и перехожу через код по строкам.Не удалось выполнить задания

int speed = this->values.speed; 
int ref = this->values.ref_speed; 

После проходя мимо первой линии, values.speed имеет значение 61, но по какой-то причине, скорость получения присваивается значение 58. После второй линии, values.ref_speed имеет значение 58, но ref получает значение 30.

При паузе вы можете видеть, что исходные значения фактически равны 61 и 58 соответственно, но значения, которые хранятся, различны.

В чем причина этого поведения?

+2

Это многопоточное приложение? – Robert

+0

Как насчет отправки кода для значений? – JeffH

+0

Да. Однако это конкретное место записывается только один раз. –

ответ

6

Это может произойти, если определение структуры значений было изменено в файле заголовка, а не все перекомпилированные объектные файлы. Тогда «карта» структуры, которую использует ваш код в этом файле, может не соответствовать остальной части кода. Это может объяснить, почему одна из переменных имеет значение другого.

Или файл Visual Studio .pdb по какой-то причине не обновился, а Visual Studio ищет старое место для переменной.

+0

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

+0

Или если структура была определена как две разные вещи в двух разных местах. Я понятия не имею, как это удалось скомпилировать, но структура была определена дважды в двух местах - с заменой порядков переменных. Спасибо! –

0

Вы делаете это в режиме отладки или выпуска? Если вы делаете это в режиме выпуска или с оптимизацией, компилятор может изменить порядок вещей для большей производительности, что может привести к нечетным результатам. Это не означает, что что-то не так в действительном исполнении, но это может сбивать с толку.

+0

Это происходит в режиме отладки. –

1

Сумасшедший. Любая вероятность, что у вас есть локальная переменная того же типа, что и this-> значения, имя которых также является значением (что объясняет, почему вы ссылаетесь на участника через this->)?

+0

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

Смежные вопросы