Подтвердить что ты не робот

Отсутствие имен символов при профилировании приложения IPhone с помощью инструментов

Я компилирую приложение IPhone через командную строку (поэтому никаких параметров XCode не было), и я не могу получить, чтобы мои имена символов отображались при профилировании с помощью инструментов. Я пробовал несколько флагов, таких как -gdawrf-2 и -g, без каких-либо успехов. Я также пытался использовать dsymutils для генерации файла .dSYM, но я не знаю, как я должен использовать его, чтобы он не удался.

Любая помощь будет принята с благодарностью!

4b9b3361

Ответ 1

Как инструменты получают отладочную информацию:

Инструменты получают информацию об отладке из файла .dSYM, который автоматически генерируется XCode при установке формата данных отладки в DWARF с помощью файла dSYM в сочетании с галочкой в ​​поле "Создать символы отладки". Установка этих параметров добавит дополнительный шаг к процессу сборки XCode и сгенерирует файл dSYM после компиляции приложения. Каждый dSYM построен с UUID, который соответствует UUID в разделе Mach-O в двоичном формате, из которого он получен. Импортер Spotlight индексирует UUID каждого файла dSym, находящегося в месте, доступном Spotlight на вашем Mac. Поэтому SPOTLIGHT выполняет всю черную магию и отвечает за создание связи между запущенным вами .app и его соответствующим файлом .dSYM.

Как создать отладочную информацию и файл dSYM без XCode:

Убедитесь, что вы компилируете флаги -gdwarf-2 и -g. (Возможно использование других комбинаций флагов)

-g Производить отладочную информацию в собственный формат операционной системы (stabs, COFF, XCOFF или DWARF 2). GDB может работать с этой отладкой Информация. В большинстве систем, которые используют stabs format, -g позволяет использовать дополнительные отладка информации, что только GDB можешь использовать; эта дополнительная информация делает более эффективная работа по отладке в GDB, но вероятно, приведет к сбою других отладчиков или отказываются читать программу. если ты хочу точно контролировать, следует ли генерировать дополнительную информацию, использовать -gstabs +, -gstabs, -gxcoff +, -gxcoff или -gvms (см. ниже). GCC позволяет вы должны использовать -g с -O. Ярлыки взятый оптимизированным кодом, может изредка вызывают удивление результаты: некоторые переменные, которые вы указали может вообще не существовать; поток контроля может ненадолго переместиться туда, где вы не ожидайте этого; некоторые утверждения не могут быть выполняются, потому что они вычисляют постоянные результаты или их значения были уже под рукой; некоторые утверждения могут выполняются в разных местах, потому что они были перемещены из петель.
Тем не менее это доказывает оптимизированный вывод отладки. Это делает это разумно использовать оптимизатор для программы, которые могут иметь ошибки.

-gdwarf-2  Производить отладочную информацию в формате DWARF версии 2 (если это поддерживается). Это формат, используемый DBX на IRIX 6. С этот параметр, GCC использует функции DWARF версии 3, когда они полезны; версия 3 совместима с версии 2, но все равно может вызвать проблемы для старых отладчиков.

Создайте файл dSYM с помощью dsymutil. Если инструмент не распознается в командной строке, используйте прожектор, чтобы найти его. ВАЖНО: поместите файл .app на свой Mac HD, прежде чем создавать dSYM, если вы работаете с сетевым диском.

dsymutil MyApp.app/MyApp -o MyApp.app.dSYM

Поместите файл .dSYM на локальный диск Mac и запустите Инструменты, как обычно.

Инсталляция прожектора Resettig:

Если символы не отображаются, это может быть связано с ошибкой spotligh. Вы можете попробовать перепрограммировать индексирование прожектора, добавив папку, содержащую файл dSYM (или даже ваш диск), в "Предотвратить прожектор для поиска в этих местах" в настройках прожектора, а затем сразу же удалите его.

Ответ 2

Я изменил свои настройки проекта, чтобы не включать файл dSYM при создании:

enter image description here

Изменив его, чтобы включить файл dSYM, помог профилировщику десимбировать символы и устранить мою проблему:

enter image description here

Ответ 3

У меня все еще были проблемы с этим.

Моя проблема заключалась в том, что я смог увидеть создаваемый файл dSYM, но инструменты не собирали его.

Чтобы исправить это, выполните следующие действия:

  • Найдите ваш файл dSYM (должен быть в ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_TYPE] - [DEVICE-TYPE]/
  • Когда инструменты остановлены, щелкните Файл → Повторно символический документ
  • Прокрутите вниз до записи с именем вашего приложения
  • Нажмите "Найти" и выберите папку с шага 1
  • Нажмите кнопку "Пуск", чтобы начать профилирование.

Ответ 4

В Xcode 4.5 вы можете выбрать профиль из отладки или выпуска. Отпустите по умолчанию для удаления символов при копировании на устройство. Очень легко переключиться на конфигурацию Debug для профилирования без нарушения конфигурации выпуска. Для этого выберите "Продукт → Изменить схему" в меню XCode. Выберите "Профиль" в списке схем, которые появляются, а затем выберите для него правильную конфигурацию сборки.

Или вы можете создать отдельную конфигурацию выпуска/профиля и использовать ее в разделе "Профиль" вашей схемы. Как добавить отдельную конфигурацию сборки, описано в XCode User Guide.

Ответ 5

Прошло три дня, пытаясь понять это для Xcode 7.1/7.3...

Изменение цели развертывания до последней версии (9.3 в то время) исправило эту проблему для меня. Моя компания нацелена на 7,0, поэтому мне, вероятно, придется создать настраиваемую схему для профилирования кода в Инструментах, чтобы избежать необходимости изменять цель (или забывать изменить цель), когда мы делаем производственный выпуск.

Кажется, что это ошибка, если dSYM не работают на основе цели развертывания?

Ответ 6

С помощью Xcode 6 Instruments вы можете предоставить dSYM файл следующим образом:

  • Файл → Символы... меню (когда профилирование остановлено)
  • выберите свое приложение и нажмите Найти
  • выберите путь, который содержит dSYM (обычно ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_CONFIGURATION] - [TARGET_PLATFORM]/). Совет. Вы можете скопировать этот путь с терминала и использовать ярлык OS X ⌘+SHIFT+G в диалоговом окне.

Также Instruments спросит вас, следует ли использовать выбранный путь для загрузки dSYM для этого приложения в будущем. Ответ:)

Ответ 7

Проблема в том, что прожектор не может найти файлы .dSYM. Это связано с тем, что Apple изменила местоположение папки DerivedData. DerivedData теперь идет в ~/Library

Spotlight не будет индексировать ~/Library, и насколько я смог установить, не может быть проиндексирован либо (например, mdimport игнорируется).

Работайте, чтобы получить символы в профилировщике, просто скопировать данные вне ~/Library, например. ваш домашний каталог будет работать нормально.

Я использовал эту командную строку:

$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/

Когда вы убиваете своего профилировщика и запускаете новый прогон профиля, вы увидите, что символы снова доступны.

Ответ 8

Проверьте журнал сборки и убедитесь, что ваш коммутатор -g переходит к компилятору - легко получить это неправильно при изменении настроек на уровне проекта и/или целевых уровней для разных конфигураций сборки и т.д.

Ответ 9

Еще одна работа в версии инструментов, поставляемой с Xcode 4, заключается в использовании пункта меню Re-Symbolicate Document в меню "Файл" для "Инструменты". Этот пункт меню позволяет использовать символы, расположенные в файле .dSYM в каталоге ~/Library/....

Ответ 10

По моему опыту, обычно это происходит потому, что "Профиль" был вызван до того, как на целевом устройстве была установлена ​​последняя версия приложения.

Попробуйте запустить приложение на устройстве/цели,, затем снова вызовите "Профиль" после его переустановки.

Ответ 11

У меня возникла эта проблема, потому что проект XCode был на сетевом ресурсе, где Spotlight не нашел файлы dSYM. Убедитесь, что на локальном диске.

Ответ 12

Я создал конфигурацию сборки профиля, чтобы справиться с этой проблемой. См. мой ответ на аналогичный вопрос Stackoverflow.