Релиз — это уже не для отладки, это финальная конфигурация программы, с максимальной производительностью. А вот смысл дебаг-версии как раз в том, чтобы ее можно было отладить.
29 мар 2013 в 11:43
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
При отладке релизной версии будет больше «непонятностей» — компилятор может произоводить далеко не очевидные оптимизации, выбрасывать переменные, переставлять части кода. В некоторых случаях отладка может быть доступна только в ассемблерных кодах.
Но с другой стороны, в некоторых случаях, определенные баги (например, при многопоточном коде или из-за ошибок в компиляторе) можно понять, только если отлаживать релизный код.
Вывод: отлаживать нужно на базе дебажной сборки, она для этого предназначена. Релизную сборку нужно отлаживать только при необходимости.
btw: релизные сборки обычно отлаживают по логам и крешдампах.
Отслеживать
ответ дан 29 мар 2013 в 11:44
112k 6 6 золотых знаков 92 92 серебряных знака 159 159 бронзовых знаков
Эмулятор Mednafen. Быстрый старт. Настройка
Хочу отметить, что ситуация не такая простая.
- Отладочная версия программы обычно компилируется с определенными флагами и библиотеками, а релизная — с другими. Соответственно, они в принципе не могут быть идентичными. Хотя концепция такова, что в релизном коде нет лишних проверок и он оптимизирован. Некоторые оптимизации вообще могут быть опасны (например, компилятор решил, что Вы переменную не используете и убрал проверку ее состояния вообще из программы, а ее изменяет внешний поток).
- Компилятор и компоновщик связей — тоже программы. И тоже могут иметь баги. Я лично сталкивался с ошибками в компиляторах. И что может намешать компилятор в объектном коде, тем более при использовании каких-либо экспериментальных возможностей — вопрос.
- Отладочная и релизная версия программы отличаются особенностями выделения памяти и некоторыми другими моментами в поведении. Соответственно, возможен вариант, что в отладочной версии все переменные и указатели были инициализированы 0, а в релизной версии туда просто попадает мусор и программа, в конечном итоге, падает.
- race conditions могут быть в обеих версиях программы. Очень обидно, когда код в произвольный, непредсказуемый момент времени падает. Но в релизе это обычно случается чаще 🙂 Тем более, что отладочную версию часто запускают под отладчиком, а он вносит свои коррективы в исполнение программы (в самое окружение, в котором она выполняется).
Касательно разницы в отладке — релизную версию по понятным причинам отлаживать сложнее. Это и потому что в ней включены оптимизации (некоторые функции будут отсутствовать, а будут встроены в код, непрямое соответствие между исходным кодом и машинным), и потому что будет отсутствовать отладочная информация (а она позволяет установить даже названия переменных и функций как они были в исходном коде).
Источник: ru.stackoverflow.com
Без этого вы не станете программистом! Найти ошибку в коде. Отладка. Как пользоваться отладчиком #23
Почему я должен использовать отладочную сборку?
Почему я должен использовать конфигурацию отладки в приложениях Android?
Причина моего вопроса в том, что я столкнулся с некоторыми ошибками, которые можно было бы полностью избежать, если бы я всегда отлаживал свой код в релизном варианте.
Поэтому в релизной сборке я просто установил флаг debuggable в true и отключил ProGuard на время отладки. -> Проблема исчезла.
(Конечно, мне все еще нужно протестировать один раз с включенным ProGuard. )
Есть ли аргументы против моего подхода? Если нет, то зачем тогда существует отладочная сборка?
Подборка аргументов в пользу отладочного варианта согласно другим ответам:
- ProGuard (хорошо. это не аргумент)
- скорость сборки (почему-то мой релизный вариант занимает меньше времени на компиляцию. )
- API-ключи (один пользователь более или менее не имеет значения. )
- отлаживаемость (это также работает в релизной сборке)
- разрешения только для отладки (я могу не комментировать эту строчку в манифесте. )
- сертификат подписи (это не имеет значения. )
Пожалуйста, дайте мне что-нибудь, что заставит меня использовать отладочный вариант, иначе я запрещу его в своих приложениях^^.
0 2018-02-21T13:11:38+00:00 1
Редактировал вопрос 21-го февраля 2018 в 3:23
Решение / Ответ
21-го февраля 2018 в 2:00
2018-02-21T14:00:40+00:00
Дополнительно
В небольших проектах отладочная сборка может показаться излишеством. Как указано в комментариях, это точно такая же сборка, как и сборка релиза, если вы включите proguard и включите отладку. Это просто шаблон для проекта Android, который позволяет быстро настроить два типа сборок.
Когда вы работаете над более крупными проектами, эта функциональность становится более интересной. Вы настроите сервер сборки, который будет запускать автоматические сборки на регулярной основе, так что вам не придется вручную настраивать файл gradle каждый раз, когда вам нужен определенный тип сборки. Помимо debug и release вы, возможно, захотите создать еще несколько конфигураций, каждая из которых будет подключаться к различным тестовым средам, чтобы тестировщики могли работать без необходимости обращаться к вам каждый раз, когда им нужна другая сборка. Вы также упоминаете, что время сборки будет короче при выпуске, но когда ваш проект станет большим и вы включите, например, Dexguard для обфускации, это займет очень много времени каждый раз, когда вы захотите собрать сборку, и вам понравится иметь отладочные сборки для ускорения разработки.
Источник: kzen.dev
Почему я должен использовать отладочную сборку?
В небольших проектах отладочная сборка может показаться излишним. Как указано в комментариях, это точно так же, как сборка релизов, когда вы включаете proguard и включаете отладку. Это просто шаблон для Android-проекта, который позволяет быстро настроить 2 типа сборки. Когда вы работаете над большими проектами, эта функция становится более интересной.
Вы настроите сервер сборки, который запускает автоматическую сборку на регулярной основе, поэтому вам не придется вручную настраивать свой файл градимента каждый раз, когда вы хотите создать определенный тип сборки. Рядом с отладкой и выпуском вы можете даже захотеть создать больше конфигураций, каждый из которых подключается к различным тестовым средам, поэтому тестеры могут работать без необходимости связываться с вами каждый раз, когда им нужна другая сборка. Вы также указываете, что время сборки будет короче при выпуске, но как только ваш проект станет большим, и вы включите, например, Dexguard для обфускации, это займет очень много времени, каждый раз, когда вы хотите построить, и вам понравится создание отладочных сборников, чтобы ускорить разработку
ответил(а) 2021-01-19T13:49:04+03:00 2 года, 5 месяцев назад
добавить комментарий
пожаловаться
Еще в рубрике
Альтернативой print_r (отображать только до 2 3 клавиш)
LLDB — Как вывести значение глобальной переменной?
Как сломать строку Javascript кода, которая запускает прокрутку веб-страницы?
Объект кода имеет непредвиденное имя файла во время импорта при использовании sys.settrace()
Другие вопросы
Inno Setup: как смотреть значения переменных или писать для вывода отладки?
Получение массива из $.post()
Печать циклических структур данных
- Вопросы
- Debugging
- Почему я должен использовать отладочную сборку?
Вопросы и ответы представляются на сайте progi.pro сугубо для ознакомительных целей.
Источник: progi.pro