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

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

4b9b3361

Ответ 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 не может добавить устройство для полноценной разработки.