VS2008 C++ Нарушение прав доступа MFC ТОЛЬКО при продвижении через режим отладки

Это является сумасшедшим. Это начало происходить в моем основном проекте, таким образом, я создал крошечный демонстрационный совершенно новый проект воспроизвести его в и конечно же.. Этого НЕ происходит в демонстрационном проекте, который я создал, который является только приложением консоли 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.

5
задан HotOil 6 May 2010 в 15:51
поделиться

4 ответа

Вы говорите, что тот же проект компилируется и работает нормально на другой машине с той же версией Visual Studio. Код выглядит нормально, так что да, похоже, что VS 2008 повреждена и ее нужно переустановить.

1
ответ дан 14 December 2019 в 01:03
поделиться

Если это работает в Release, но не работает в debug, то я бы предположил, что у вас где-то есть неинициализированная переменная. В отладке она автоматически устанавливается в 0xcdcdcdcdcd (или ее часть в зависимости от размера переменной), что приводит к сбою, в Release у вас есть значение, которое уже было в памяти, и, возможно, это значение не позволяет ей сломаться ... Довольно часто такая неинициализированная переменная используется в качестве границы цикла, и в отладке вы пишете через память и перезаписываете что-то важное, что впоследствии может привести к сбою. В релизе значение просто оказывается в порядке, но это не всегда так.

Что касается отладки в релизе, не беспокойтесь о том, что это значение выглядит как null. Скорее всего, это не так, но отладчику очень трудно определить, где именно вы находитесь в коде из-за процесса оптимизации.

0
ответ дан 14 December 2019 в 01:03
поделиться

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

0
ответ дан 14 December 2019 в 01:03
поделиться

У меня тоже самое, опять же на платформе разработки Win7x64, VS2008 SP1. Мой код - это c++, WTL, ATL, DirectShow и различные другие библиотеки.

Журнал обновления Windows показывает, что в обед на моей машине было обновление windows. Проблема начала возникать только после обеда - без каких-либо изменений в проекте!

Черт бы вас побрал с вашими дурацкими автоматическими обновлениями, которые ломают среду разработки m$!!! Позор вам всем!

1
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: