Debug/Release в чем разница?
#1
Отправлено 18 декабря 2007 - 13:24
#2
Отправлено 18 декабря 2007 - 14:19
Расскажите нам, пожалуйста, о каком языке программирования речь идет.Господа, кто-нибудь располагает информацией, в чем конкретно состои разница между проектом собранным в дебаге и релизе? Какая доп. информация включается в дебаг? Ведь и там и там на выходе бинарник. Чтобы не у вас не возникло впечатления, что этот пост в оффтопике, поясню...мне стало любопытно, какая инфа позволяет средствам автоматизированного тестирования отслеживать какая функция выполняется в текущий момент...например какие функции вызывались во время теста, а какие нет
Абстрактно говоря - в дебаг версии может быть включено:
1. Отладочный вывод
2. Дополнительные параметры запуска приложения, которые умеют подсчитывать, например, расход памяти или время выполнения итд. итп.
3. Дополниетельные интерфейсы (hotspot-ы), используемые например, для подключения различных средств автоматизации
Alexey
#3
Отправлено 18 декабря 2007 - 15:17
Речь идет о языках С/С++Расскажите нам, пожалуйста, о каком языке программирования речь идет.
#4
Отправлено 19 декабря 2007 - 03:59
(Так, например, кроме сборок(написанных на С#) дополнительно ложатся в конечный каталог pdb файлы.)
К тому же разработчики часто вставляют конструкции типа Debug.Assert, которые в релиз версии просто не сработают.
В вашем случае (С\С++) нужно обязательно тестировать и Debug, и Release версии, т.к. там есть особенности связанные с освобождением памяти (тестировать нужно на предмет "утечек" памяти - некоторые функции по-разному себя ведут, к тому же кое где идёт освбождение ресурсов автоматом в Debug).
Сборки C# практически избавлены от такой разницы (Debug\Release), там заведует этим делом сборщик мусора. Хотя, попадаются иногда тоже интересные случаи.
#5
Отправлено 19 декабря 2007 - 15:01
1. Дебажная информация может присутствовать как в бинарнике откомпилированой программы, так и лежать отдельно в dbg файле.
2. У некоторых невнимательных разработчиков есть тенденция к неправильному дефайну кода, т.е. в релизную конфигурацию попадает код который должен идти в дебаг и наборот.
Дебаг информацию мы использовали для получения покрытия исходного кода тестами - Rational Coverage, для ловли утечек памяти - Rational Purify.
Все вышесказаное касается С++.
Сборки C# практически избавлены от такой разницы (Debug\Release), там заведует этим делом сборщик мусора. Хотя, попадаются иногда тоже интересные случаи.
Darkus, не могли бы вы поделится примерами?
#6
Отправлено 20 декабря 2007 - 04:25
В целом проблема состояла в том, что в Debug сборщик мусора работал как положено, а в Release устанавливается галочка "Оптимизация" и сборщик мусора начинал чистить с учётом этой опции.Darkus, не могли бы вы поделится примерами?
Наш пример дать не могу, но вот, нашёл близкий случай.
Если не про GC, то встречаются распространённые ошибки, когда переменную забывали проинициализировать.
В Debug (для ссылочных типов) по умолчанию вставлялось значение типа 0, а в Release это уже null. Соответственно получали unhandled exception....
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных