Отладочная информация "DWARF" и журналы сбоев
Я пытаюсь сопоставить мое понимание форматов отладочной информации "DWARF" с "DWARF с файлом dSYM" с тем, что я вижу в информации о сбое для различных конфигураций сборки iOS.
Я пытался решить проблему, когда сбой в сборке с отладочной конфигурацией не обозначался по умолчанию. Это были мои настройки сборки до того, как проблема была решена -
Обвязка связанного продукта - отладка - нет, выпуск - да
Убрать символы отладки во время копирования - отладка - нет, выпуск - да
Формат информации об отладке - Отладка - DWARF, Выпуск - DWARF с файлом dSYM
То, что заставило его работать, также установило формат информации отладки "DWARF с файлом dSYM" для настройки отладки.
У меня вопрос: зачем мне устанавливать формат "DWARF с файлом dSYM", если я указываю, что продукт не должен быть извлечен из его символов в файл dSYM (в настройке продукта, связанного с полосами)?
Мое (вероятно, неправильное) понимание было таково, что, если я установлю его в DWARF, тогда вся информация отладки будет внутри двоичного файла приложения, и мне не нужен отдельный файл dSym для символизации? Пожалуйста, помогите мне лучше понять это.
1 ответ
На платформах Apple DWARF никогда не запекается в исполняемый файл (за исключением размотки информации). Включение отладочной информации DWARF просто означает, что файлы.o содержат отладочную информацию в формате DWARF. Однако компоновщик не вносит это в исполняемый файл.
Если вы запрашиваете файл dSYM, отдельный шаг сборки использует dsymutil
собрать отладочную информацию из файлов.o в пакет или файл dSYM.
Отладчики могут использовать карту в исполняемом файле для поиска отладочной информации в файлах.o, когда это необходимо, при условии, что вы отлаживаете на компьютере сборки. Вот почему вам обычно не нужен файл dSYM для сборки Debug. У Symbolication нет исполняемого файла, только UUID для него. Он может найти dSYM, используя UUID, но у него нет информации, чтобы найти.o файлы.
Посмотрите этот ответ от разработчика Apple, участвующего в реализации этого материала. Кроме того, эта старая статья вики он написал.