Это является сумасшедшим. Это начало происходить в моем основном проекте, таким образом, я создал крошечный демонстрационный совершенно новый проект воспроизвести его в и конечно же.. Этого НЕ происходит в демонстрационном проекте, который я создал, который является только приложением консоли Win32.
Я выполняю это на Win7x64, если это имеет значение. VS2008 SP1.
Здесь идет. Я создаю маленькое диалоговое приложение с кнопкой. Поместите точку останова в функцию-обработчик для той кнопки. Функция-обработчик кнопки похожа на это:
void CTestProjectDlg::OnBnClickedButton1()
{
int i;
i = 2; // < breakpoint here
i = 3;
}
Нажмите кнопку, поразите точку останова. F10, чтобы ступить, и быстро расти: "Исключение первого шанса в 0x0398f77b в TestProject.exe: 0xC0000005: Нарушение прав доступа".
Это дает мне опцию Повредиться или Продолжиться. Если я Продолжаю, это просто поражает его снова, только не "Первый Шанс". Да мне зарегистрировались в том исключении Отладка-> Исключения dlg.
Если я, Повреждение, стек вызовов просто показывает мне строку, где точка останова. Если я F10 снова.. Я получаю исключение снова, только теперь стек вызовов показывает мне в _AfxDispatchCmdMsg () функцию, и мой оригинал OnBnClickedButton1 () больше не находится в стеке вызовов.
Не имеет значения, куда я поместил точку останова.
Если вместо F10 я просто продолжаю F5, он обычно работает.
Теперь.. если я создаю Версию выпуска и выполнение в режиме отладки: Я поразил точку останова и все указатели, значения переменных выглядят нормальными. F10, и они обращаются к мусору. Этот указатель является теперь нулем. m_csHello теперь
Однако в режиме Release, исключение не поймано, и все это хорошо работает. "Привет Мировая строка отображена в диалоговом окне, как это должно.
Я вставил запрос, чтобы видеть, был ли некоторый патч установлен на моем поле отделом IT в прошлый день или два. Этого не происходило 2 дня назад.
Что Вы думаете? VS2008 повреждается?
Спасибо.
Править: Дополнительная информация. Этого не происходит, если я создаю/отлаживаю x64 платформу. Только для Win32.
Я также смотрел на все текущие исправления/обновления системы защиты для VS2008 на поле. Они
Наконец, я поместил проект на другую машину, которая не обновлялась в течение прошлых 2-3 недель. Это работает, находят на там, и это имеет эти те же установленные обновления VS.
Я также изменил код, через который переступают в целях этого сообщения... Это - простое целочисленное присвоение, никакой включенный MFC.
В данный момент я посреди переустановки VS2008.
Вы говорите, что тот же проект компилируется и работает нормально на другой машине с той же версией Visual Studio. Код выглядит нормально, так что да, похоже, что VS 2008 повреждена и ее нужно переустановить.
Если это работает в Release, но не работает в debug, то я бы предположил, что у вас где-то есть неинициализированная переменная. В отладке она автоматически устанавливается в 0xcdcdcdcdcd (или ее часть в зависимости от размера переменной), что приводит к сбою, в Release у вас есть значение, которое уже было в памяти, и, возможно, это значение не позволяет ей сломаться ... Довольно часто такая неинициализированная переменная используется в качестве границы цикла, и в отладке вы пишете через память и перезаписываете что-то важное, что впоследствии может привести к сбою. В релизе значение просто оказывается в порядке, но это не всегда так.
Что касается отладки в релизе, не беспокойтесь о том, что это значение выглядит как null. Скорее всего, это не так, но отладчику очень трудно определить, где именно вы находитесь в коде из-за процесса оптимизации.
Умнее всего (что противоречит интуиции) выбросить все точки останова и тому подобное. Перестройте свой проект (не инкрементальная сборка). Важно начать с чистого листа, перехватить исключение, получить чистый стек вызовов и убедиться, что сборка соответствует исходным файлам. Вы также должны отключить предварительно скомпилированные заголовки и тому подобное.
У меня тоже самое, опять же на платформе разработки Win7x64, VS2008 SP1. Мой код - это c++, WTL, ATL, DirectShow и различные другие библиотеки.
Журнал обновления Windows показывает, что в обед на моей машине было обновление windows. Проблема начала возникать только после обеда - без каких-либо изменений в проекте!
Черт бы вас побрал с вашими дурацкими автоматическими обновлениями, которые ломают среду разработки m$!!! Позор вам всем!