Я создал новое C ++ MFC MDI-приложение в Visual Studio.
ПЕРВАЯ ПРОБЛЕМА - Исключение An invalid handle was specified
выдается при запуске его в режиме отладки / выпуска (только для x86).
Вот мой конфиг.:
- Visual Studio Pro 2015 Версия 14.0.25431.01 Обновление 3
- Windows 10 Версия 1809 (сборка ОС 17763.292)
- .NET Framework Версия 4.7.03190
- Установлен распространяемый Visual C ++ (2005, 2008, 2010, 2012, 2013, 2015)
Нажатие «Перерыв»: без серверов Microsoft Symbol Server в C:\Windows\SysWOW64\ntdll.dll
появляется что-то не так.На серверах Microsoft Symbol просто отображается «Источник недоступен».
Нажатие кнопки «Продолжить» один или два раза: запускает приложение, которое можно использовать в обычном режиме.
При выходе из приложения путем нажатия кнопки «X» в диалоговом окне в ntdll.dll также добавляется Access violation reading location
.Это исключение выдается в (x86) и (x64).
Я протестировал его на 3 других компьютерах под управлением Windows 10 (более старая версия), и происходит то же самое.Я проверил его на 2 компьютерах под управлением Windows 7, и проблем не возникло.
РЕДАКТИРОВАТЬ - Пожалуйста, смотрите два следующих снимка экрана для стека вызовов после каждого из этих исключений
Callstack для исключения недопустимого дескриптора при запуске приложения
Callstack для исключения нарушения прав доступа при выходе из приложения
ВТОРАЯ ПРОБЛЕМА - Значения инициализированных переменных случайно неверны.
Например, я видел это в конструкторе базового класса:
variable = 0; // int
Отладчик показывает, что значение variable
равно 52685
.Не уверен, что это совпадение, но идентификатор распространяемого обновления 3 для VC ++ 2015 - 52685 (см. Параметр URL).
Распространяемое обновление для Microsoft Visual C ++ 2015 3 / id = 52685
Вывод variable
в консоли показывает правильное значение (0).
Буду признателен за помощь в решении этой проблемы, поскольку отладка действительно затруднена.Единственное, в чем я уверен, это то, что он связан с Windows 10.
EDIT - Пожалуйста, смотрите два следующих скриншота значений переменных при отладке.В первом случае вы можете видеть, что все переменные типа int имеют значение -842150451 (которое должно быть 0, верно?).Эти переменные объявлены в закрытом разделе класса.На втором снимке экрана показан конструктор по умолчанию для этого класса.Один из этих «int» (image_bpp) показывает значение 52685 вместо назначенного 0. Если я переключаю инициализацию image_bpp и image_pixel_color, то это image_pixel_color, который показывает неправильное значение.
Объявленозначения переменных
Инициализированные значения переменных
Похоже, я не первый с этой проблемой.Я забыл упомянуть, что я использую простое наследование (создание экземпляра производного класса, затем вызывается конструктор базового класса, и именно здесь я ставлю точку останова).
См. Эту ссылку для справки: Ошибка компилятора с производными классами