Debuger MSVC++
От: Аноним  
Дата: 26.02.06 04:01
Оценка:
Доброго времени суток! Вопрос на засыпку — при запуске программы под дебугером MSVC++ нормально работает, при запуске без дебугера вываливается, пишет что память не может быть прочитатна. Программа довольно здоровая, там юзается дин. выделение памяти, работа с COM портами, OpenGL. IDE Visual Studio 7.1.30.88. Может кто знает почему так? Все тонкие места со сбором мусора и выделением памяти прологировал, нормально отрабатывает. Помогите пожалуйста

26.02.06 19:48: Перенесено из 'C/C++'
Re: Debuger MSVC++
От: Павел Кузнецов  
Дата: 26.02.06 05:41
Оценка:
> при запуске программы под дебугером MSVC++ нормально работает, при запуске без дебугера вываливается, пишет что память не может быть прочитатна. Программа довольно здоровая, там юзается дин. выделение памяти, работа с COM портами, OpenGL. IDE Visual Studio 7.1.30.88. Может кто знает почему так?

Вполне вероятно, что в программе присутствует ошибка с порчей памяти или чтением неинициализированных переменных, маскирующаяся при запуске под отладчиком, т.к. в последнем случае, например, значения неинициализированных объектов могут быть вполне предсказуемыми, в отличие от "свободного запуска".

Раз используется VC++7.1, для начала можно порекомендовать погонять программу, включив runtime проверки. Если не включать /RTCc (smaller type assignment check), то производительность программы не должна сильно измениться.

Для "ловли" порчи кучи можно использовать _CRTDBG_CHECK_ALWAYS_DF в _CrtSetDbgFlag или _CrtCheckMemory/_heapchk.

Далее по теме:
Fixing Release Build Problems
Как пережить release-версию
Автор(ы): Dr. Joseph M. Newcomer
Дата: 18.06.2001
Статья посвящена проблемам перехода с Debug-версии на Release-версию. Рассматриваются
типичные ошибки, которые могут не проявляться в отладочной версии, но проявляются в финальной.
Обсуждается вопрос "ошибок компилятора" и вопросы необходимости оптимизации и ее побочные эффекты.
В последней редакции добавлен раздел посвященный проблеме совместимости динамических библиотек.
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: Debuger MSVC++
От: Аноним  
Дата: 26.02.06 07:42
Оценка:
Попробовал под OllyDebugger посмотреть, опять-таки все прекрасно работает. Чего эти дебугеры могут такого делать? Причем все вываливается при обращении одной и той же инструкции к разным областям памяти, не относящимся к моей программе. Без дебугера я так тыкаться могу долго. А есть какя нить утилита, чтобы сдампить значения всех переменных запущенного процесса?
Re: Debuger MSVC++
От: rg45 СССР  
Дата: 26.02.06 07:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток! Вопрос на засыпку — при запуске программы под дебугером MSVC++ нормально работает, при запуске без дебугера вываливается, пишет что память не может быть прочитатна. Программа довольно здоровая, там юзается дин. выделение памяти, работа с COM портами, OpenGL. IDE Visual Studio 7.1.30.88. Может кто знает почему так? Все тонкие места со сбором мусора и выделением памяти прологировал, нормально отрабатывает. Помогите пожалуйста



Я бы посоветовал вместо отладчика выдавать протокол работы программы в лог. Первым делом нужно попытаться отловить момент возникновения ошибки, дальше уже легче будет сориентироваться что делать. По симптомам похоже, что кто то портит память.
--
Купаев, "нахер" твоя жопа хороша, шоха ты на подсосе. Тебе кто разрешил использовать общаковый молоток для вымещения личных обид?
Re[2]: Debuger MSVC++
От: Аноним  
Дата: 26.02.06 08:06
Оценка:
Устал логи писать. Не получается. Похоже где-то память уничтожается, а сам указатель не зануляется(что как раз наверное дебугер и делает). Я примерно знаю место, но логами не получается ничего сделать. Вот круто было бы какую-нить утилитку, чтобы сдампить значения переменных?
Re[3]: Debuger MSVC++
От: Murom Россия  
Дата: 26.02.06 08:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Попробовал под OllyDebugger посмотреть, опять-таки все прекрасно работает. Чего эти дебугеры могут такого делать? Причем все вываливается при обращении одной и той же инструкции к разным областям памяти, не относящимся к моей программе. Без дебугера я так тыкаться могу долго. А есть какя нить утилита, чтобы сдампить значения всех переменных запущенного процесса?


Не знаю как микрософтовский отладчик, не работал, но практически все отладчики имеют tracepoint'ы (watchpoint'ы). На сколько я понимаю, тебе надо получить момент, когда программа некорректно обращается к памяти. Так вот tracepoint'ы и watchpoint'ы именно для подобных ситуаций и предназначены.

Сами по себе отладчики ничего не переделывают ни в программном коде, ни в данных программы. Можешь построить релиз и его запустить под отладчиком.
- Eugeny
Re: Debuger MSVC++
От: co  
Дата: 26.02.06 08:09
Оценка:
попробуй windbg.
Re: Debuger MSVC++
От: Аноним  
Дата: 26.02.06 13:01
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток! Вопрос на засыпку — при запуске программы под дебугером MSVC++ нормально работает, при запуске без дебугера вываливается, пишет что память не может быть прочитатна. Программа довольно здоровая, там юзается дин. выделение памяти, работа с COM портами, OpenGL. IDE Visual Studio 7.1.30.88. Может кто знает почему так? Все тонкие места со сбором мусора и выделением памяти прологировал, нормально отрабатывает. Помогите пожалуйста



Предполагая что программа скомпилирована в debug режиме, я обычно делаю следующее:

1. Включаю "just-in-time debugging" где-то в установках Visual Studio.
2. Запускаю программу без отладчика
3. Когда программа упадет и Windows повесит диалог с предложением послать лог на MS, жму кнопку Debug.
4. Когда запускается отладчик, смотрю стек вызовов.

Если программа скомпилирована в release режиме, включаю генерацию отладочной информации — ключ /Zi, перекомпилирую проект и повторяю шаги 1-4.

Вообще говоря, это стандартная проблема. Стоит один раз разобраться как решать такие проблемы.

Александр
Re: Debuger MSVC++
От: Аноним  
Дата: 27.02.06 04:15
Оценка:
Всем огромное спасибо. Нашёл косяк. Я дурак у меня справка 8)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.