Re: Как поймать глюк в Release версии программы
От: T4r4sB Россия  
Дата: 25.09.15 07:32
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.


M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive


А вот я однажды в MSVC-2003 именно в релизе поймал глюк, который никто не смог объяснить порчей памяти или неинициализированными переменными.
Я долго пытался понять, почему объект создаётся корректно, а сразу после передачи в другую функцию объект превращался в груду мусора. Я нашёл место, где происходит что-то странное, внимательно изучил асмовыхлоп... Короче, суть в том, что компилятор насоздавал на стеке временных объектов, повызывал их методы, а потом в другую функцию кинул ссылку на этот временный объект, но с неправильным смещением относительно верхушки стека (ну то есть типа записал в регистр esp-12 вместо esp-8, как-то так).
У меня даже асмокод где-то сохранился.

Мне сказали, что такое бывает.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 25.09.2015 7:33 T4r4sB . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.