Значение, не назначенное для обработки при сборке с использованием конфигурации выпуска в VS2010

#c #visual-studio-2010 #build #release #hwnd

#c #visual-studio-2010 #сборка #выпуск #hwnd

Вопрос:

Я использую VS2010 и столкнулся со следующей проблемой:

 HWND handle = NULL;
handle = pPlatform->getWindowHandle(); 
  

Когда я отлаживаю этот код в конфигурации отладки, «дескриптору» присваивается правильное значение, но когда я отлаживаю это в сборке выпуска, «дескриптор» остается НУЛЕВЫМ.

getWindowHandle() — это просто средство доступа:

 HWND PlatformManager::getWindowHandle()
{ 
   return windowHandle;
}
  

«WindowHandle» имеет ненулевое значение как при отладке в сборке debug / release.

Спасибо за помощь.

Ответ №1:

Сборка выпуска включает оптимизацию, и иногда отладчик может видеть неверное значение для переменных, которые оптимизируются. Это усложняет отладку релизных сборок, но именно поэтому они не называются отладочными сборками. 🙂

Короче говоря, если вам просто нужно отладить сборку выпуска, но ваш отладчик обманывает вас, вы всегда можете прибегнуть к старой доброй отладке printf. Добавьте несколько функций трассировки, например, с помощью OutputDebugString, и посмотрите, handle действительно ли остается NULL в этот момент.

char buf[256]; дескриптор HWND = NULL; дескриптор = pPlatform->getWindowHandle(); OutputDebugStringA(_itoa((int)дескриптор, buf, 10));

Комментарии:

1. Спасибо, действительно кажется, что отладчик не увидел правильного значения 🙂