Xcode Instruments снимает символы, несмотря на все настройки сборки, напротив

Проблема

Инструмент Time Profiler лишает все символы, кроме системных библиотек из моего приложения, несмотря на то, что я отключил это поведение во всех соответствующих настройках сборки в Xcode - , но только на одной машине разработки. другая машина dev ведет себя нормально.

Описание

Инструмент Time Profiler снимает все символы, кроме системных библиотек, несмотря на то, что я отключил это поведение во всех соответствующих настройках сборки в Xcode, но это происходит только на одной из моих машин разработки. У меня есть две машины для разработки, использующие ту же версию OS X, Xcode и Instruments, и каждая машина использует идентичную копию того же проекта Xcode с идентичными настройками сборки, схемами и другими конфигурациями, и приложение профилируется с использованием того же (iPhone 4S с последней публичной версией iOS 5).

Машина 1
- Mac OS X 10.7.4
- Xcode 4.3.2 (4E2002)
- Инструменты 4.3 (4321)

Машина 2
- Mac OS X 10.7.4
- Xcode 4.3.2 (4E2002)
- Инструменты 4.3 (4321)

Шаги по воспроизведению

  • Открыть проект с образцом на каждом компьютере.
  • Убедитесь, что в качестве тестового устройства выбран iPhone 4S.
  • Выберите продукт > Профиль
  • Когда инструменты запускаются, выберите Time Profiler и продолжите.
  • Запустите приложение.
  • Обратите внимание, как символы удаляются при работе на iMac (Machine 1), но не на MacBook Air (Machine 2).

Ожидаемое поведение

Символы из моего собственного кода должны появляться в Time Profiler на обеих машинах.

регрессия

Я пробовал все следующие, без изменения фактических результатов:

  • Перезагрузка машины.

  • Попытка других проектов Xcode

  • Удаление "Производных данных" для всех проектов в организаторе Xcode.

  • Повторная символика документа в Инструментах (тщательный выбор правильного файла DSYM в ~/Library/blahBlahBlah...)

Заключительные заметки

Вот ссылка на .zip файл примерного проекта: Пример проекта .zip

Ответ 1

Наконец, я смог заставить его работать с помощью метода, который просто стесняется сценария с ядерным режимом:

  • Убедитесь, что для вашей текущей конфигурации сборки отключена выделение символов. Убедитесь, что вы сделали это для своей конфигурации Release, если это то, что было профилировано для инструментов.
  • Удалите приложение с устройства iOS.
  • Перезагрузите устройство iOS.
  • Перезагрузите Mac (я не доверяю Xcode или Lion вообще, чтобы оставить все соответствующие процессы в противном случае).
  • Запустите Xcode, перейдите в "Организатор" > "Проекты" и удалите производные данные для затронутого проекта.
  • Очистите проект. Черт, почему бы и нет?
  • Создание и профиль для инструментов.
  • Для ясности выберите Time Profiler in Instruments.
  • Первый запуск не отображает символы, но не уходит. Оставьте инструменты запущенными!
  • Переархивируйте документ в Инструментах, осторожно переведя его в правильный файл dSYM для текущей сборки. Это должно быть проще, поскольку вы удалили полученные данные на шаге 5.
  • Теперь вы сможете увидеть свои символы. Это помогает, если вы скрываете символы objective-C.

Почему я предлагаю удалить приложение и перезапустить устройство iOS на шагах 2 и 3? У меня есть подозрение, что Xcode не выполняет чистую установку каждой сборки, но может устанавливать дельта, так что адреса символов, присутствующие в Инструментах, представляют собой смесь текущей сборки плюс предыдущие сборки. Если это так, то эта проблема еще более распространена для кого-то вроде меня, который разделяет одно тестовое устройство между несколькими Mac. Это предположение может быть совершенно неверным.

Если вышеуказанные шаги не сработают для вас, сообщите мне в комментариях. Я хотел бы создать подробный радарный отчет в какой-то момент в будущем.

Ответ 2

Я не уверен, что он был исправлен в 4.3, но это известная проблема в 4.2 здесь

Инструменты Существует известная проблема с действием Profile из Xcode 4.2. После сборки, в которой исходные файлы не были изменены, инструменты не смогут собирать символы для целевого приложения.

Это влияет на проекты, где оба:

  • Конфигурация выпуска выбрана для действия "Профиль". (По умолчанию)
  • Настройка сборки с разделителями Strip Linked установлена ​​на "Да" или настраиваемая фаза выполнения Script разбивает продукт. (Не по умолчанию)

Обходным путем является выполнение любого из следующих действий:

  • Выполните "Очистить" продукт перед началом профиля действие.
  • Сделайте очистку продукта и временно установите связанный с разделителем Настройка сборки продукта на "Нет" при профилировании.
  • Задайте конфигурацию действия "Профиль" для "Отладки".
  • Выполнять последовательные профили непосредственно из инструментов, когда вы делаете не нужно перестраивать. При разработке приложений Mac, используя GC Monitor шаблон в Инструментах может привести к сбою в работе инструмента. к обход проблемы, пожалуйста, рассмотрите возможность переноса приложения на ARC.

Ответ 3

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

Затем я сделал копию Debug, назвал ее Profile, попробовал ее, и символы профиля были показаны в профилировщике. Большой! Затем я изменил уровни оптимизации и т.д. Так же, как и Release, и теперь он работает! Просто хотел поделиться этим, так как этот комментарий пощадил бы меня часами...

Ответ 4

Вы столкнулись с тем же и наткнулись на эту тему.

Я понял, что сначала профилировал приложение с помощью сборки релиза и после изменения схемы в Xcode для того же приложения, профилировщик все еще не мог символизировать. Я пробовал все очевидные решения, упомянутые выше, но тщетно.

Профайлер каким-то образом все еще ссылается на настройки первой сборки (release) и, следовательно, не может символизировать. Таким образом, я просто изменил идентификатор пакета приложений для целей тестирования, чтобы новое приложение было создано целиком для профилирования. Я мог бы проверить код, где существуют утечки.

Попробуйте и дайте мне знать, если это сработает для вас. Все еще размышлял о том, почему инструменты не могут символизировать.

Ответ 5

У меня была аналогичная проблема, когда у меня не было символов в моем приложении os x, которое я построил из командной строки (так что в этом случае это не проблема iphone или xcode). Оказалось, что проблема связана с плохим DYLD_LIBRARY_PATH, содержащим мой PATH. Когда я избавился от всех этих небиблиотечных путей, таких как /usr/bin/, он работал.

Ответ 6

Попробуйте открыть XCode 3 и его Организатор. И попробуйте добавить из этого Organizer устройства на обе машины.

Просто откройте Организатор и подождите его процессов. Если вы видите кнопку "Использовать для разработки", нажмите на него.

Иногда XCode 4 не может добавить устройство для полноценной разработки.