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

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

любая помощь будет высоко оценили!

12 ответов


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

enter image description here

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

enter image description here


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

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

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

  1. найдите файл dSYM (должен быть в ~ / Library / Developer/DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_TYPE] - [тип устройства]/
  2. С остановленными инструментами нажмите на файл - > повторно символизировать документ
  3. прокрутите вниз до записи с ваше имя приложения
  4. нажмите "Найти" и выберите папку из Шага 1
  5. Нажмите кнопку Пуск, чтобы начать профилирование

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

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

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

убедитесь, что вы compilig с –gdwarf-2, а -г флаги. (Другой флаг комбинации могут работать)

- g Производить отладочную информацию в собственный формат операционной системы (stabs, COFF, XCOFF или карлик 2). GDB может работать с этой отладкой информация. В большинстве систем, которые используют формат stabs,- 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. Если инструмент не распознается в командной строке, используйте spotlight для его поиска. значительное место. файл приложения на mac HD перед созданием dSYM, если вы работаете на сетевом диске.

dsymutil MyApp.app / MyApp-o Приложение myapp.приложение.dSYM

место .файл dSYM на локальном диске mac и приборы работают как обычно.

Resettig spotlight индексирование:

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


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

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


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

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

похоже, что это, вероятно, ошибка, если dSYMs не работают на основе цель развертывания?


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

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

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


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

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

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

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

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

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


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


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


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

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


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


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