Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > MS VS 8


Автор: FelikZ 11.7.2007, 14:31
Код программы большой, поэтому выложить не смогу...
Запускаю в визуал студии через F5 - программа работает как надо, запускаю через Ctrl+F5 летит к бабушке в Израиль...
Был уже когда-то такой глюк поборол методом комментирования всего и вся, но может кто подскажет как это можно вылечить более цивилизованным путем?


Автор: GGoga 11.7.2007, 15:33
Цитата(FelikZ @ 11.7.2007,  14:31)
Код программы большой, поэтому выложить не смогу...
Запускаю в визуал студии через F5 - программа работает как надо, запускаю через Ctrl+F5 летит к бабушке в Израиль...
Был уже когда-то такой глюк поборол методом комментирования всего и вся, но может кто подскажет как это можно вылечить более цивилизованным путем?

Глюк дебага в Студие - это знакомый случай. У меня, например, дебаг в 75% случаев вообще не запускается! Данную проблему решаю переустановкой студии... Знаю это не выход, но для меня 10 минутная переустановка гораздо выгоднее, чем неограниченно затраченное время на поиск и устранение ошибки (или поиск необходимого пункта в большем количестве настроек). Подобного рода вопросы я задавал на многих форумах, но так конкретного ответа и не получил... :(

Так что попробуй полностью переустановить Студию и запустить свой проект снова, если ошибка вновь обнаружится, то, скорее всего, это какой-то конфликт в системе...

А вообще было бы и самому интересно найти метод решения проблемы работы дебага в Студие.

Автор: JUmPER 11.7.2007, 15:34
в vc6 такая же фигня есть

Автор: FelikZ 11.7.2007, 15:47
Цитата(GGoga @  11.7.2007,  15:33 Найти цитируемый пост)
А вообще было бы и самому интересно найти метод решения проблемы работы дебага в Студие.

Таки нашел! Метод коментирования не помог, зато метод мессадж боксов еще как помогает! Значит рассказываю. Берем и расставляем 5 пронумерованых мессадж боксов где-то в той зоне где вам кажется, что там может быть ошибка. Запусткаем Ctrl+F5. Вылетает 1, 2, 3... ОПА! фатал еррор! заходим в код убераем два последних и наш поиск глюка уменьшается в довое! Ну и повторять процедуру пока не будет что-то вроде:

Код

//MBOK - дефайн MessageBox(NULL, Message, _T(""), MB_OK|MB_ICONINFORMATION|MB_TOPMOST) 

.....

MBOK("MB HERE?-3"); //Вызвался
MyClass mc = new MyClass(); // значит глюк сдесь! ;)
MBOK("MB HERE?-4"); //Не вызвался



Мне помогло  smile 
Всем спс, тема closed.

Автор: Earnest 11.7.2007, 17:52
Ну, я бы сказала, что это не глюк среды, а глюк в программе: в среде работает, вне среды - нет. Особенно приятно когда такое дело с релизом. 
Метод расстановки контрольных точек для локализации ошибки - вполне разумен. Только мессаж-бокс не лучший вариант, он все таки нарушает поток управления: вешает свой модальный цикл и прочая. Т.е. иногда может помешать обнаружить ошибку. Я использую трассировочные сообщения: в дебаге просто TRACE, в релизе - OutputDebugString. Пишем 1, 2, 3 или можно переменные какие распечатать...

Предваряя вопрос, как это дело видеть, если запускаем вне среды.
На это есть чудесная утилита DebugView, взятая http://www.sysinternals.com. Просто запускаем ее, потом свой процесс и смотрим, что вывелось, что нет. 

Автор: Nastya 11.7.2007, 18:27
Кстате, никто не забрещает создавть Release + *.pdb с отладочной информацией - тогда все можно отлаживать как в дебаге smile

Автор: FelikZ 11.7.2007, 18:38
Цитата(Nastya @  11.7.2007,  18:27 Найти цитируемый пост)
тогда все можно отлаживать как в дебаге

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

Автор: Nastya 12.7.2007, 09:33
FelikZ, не берусь судить не видя ситуации, но такое может быть, когда кто-то порушил стек или кучу. 

Автор: FelikZ 12.7.2007, 13:55
Nastya, вылетал оператор "new".... фиг знает почему... проверил конструктор класса, который создавал, туда даже не доходило... Ну вобщем перенес этот new и все стало на места smile

Автор: dumb 12.7.2007, 14:04
значит между тем местом, где этот new находился до переноса, и тем, где он нах-ся сейчас(хотя это не стопудово - может где-то раньше), есть что-то, что портит кучу. типа char *a = new char[10]; memset(a,0,100);

Автор: FelikZ 12.7.2007, 14:28
dumb, есть такое:

Код

MSG msg;
.....
SecureZeroMemory(&msg,sizeof(msg));


это может быть оно? больше ничего с памятью там нету...

Автор: JUmPER 12.7.2007, 14:37
онаж затирает пару указателей нулями.
если ж потом по ним обращаться или делать delete...

Автор: bilbobagginz 12.7.2007, 21:47
спасибо Earnest, и я теперь бадяг вью.

smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)