2013-03-27 4 views
5

У меня есть два проекта, один из которых - networkLib для входа в систему и некоторые другие сетевые функции, а другой - usingLibDemo. Поэтому у меня есть исходный код обоих проектов.Как я могу отлаживать фреймворк в Xcode?

Проект networkLib выдает каркас, называемый myNetKit.framework, который используется usingLibDemo.

enter image description here

Теперь я успешно использовать myNetKit.framework для входа, но иногда он выходит из строя, может быть, в основной() без стека информации, но иногда Xcode дает мне информацию стека, как показано ниже:

enter image description here

Так что я знаю, где он выходит из строя:

enter image description here

Но Utils.m не выставлен, как Xcode получает информацию о стеке и строку сбоя и в конечном итоге открывает исходный файл для меня? Потому что у меня есть исходный код на моем диске?

Если да, то как я могу отлаживать myNetKit.framework шаг за шагом, когда он не разбился?

Большое спасибо за любые советы.

ответ

3

Вы также можете добавить проект библиотеки (networkLib) в свой проект и динамически связать библиотеку, добавив зависимость в параметры проекта. Таким образом, вы можете иметь весь исходный код в своем проекте. Таким образом, вы можете отлаживать его во время выполнения.

+0

Спасибо, я знаю, что вытащить проект 'networkLib' в' usingLibDemo' будет легко отлаживать, поскольку исходный код есть. Но мне интересно, как Xcode получает исходный файл 'Utils.m' и полную информацию о стеке. –

+0

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

-1

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

+0

Спасибо, но как Xcode получает файл Utils.m? –

+0

Нельзя отлаживать, если вы только интегрировали файл .framework. Вы также можете попробовать ответить Mathew Varghese – Yogi

+0

Спасибо, я знаю, что вытащить проект 'networkLib' в' usingLibDemo' будет легко отлаживать, поскольку исходный код есть. Но мне интересно, как Xcode получает исходный файл 'Utils.m' и полную информацию о стеке. –

4

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

+0

Спасибо, я знаю, что вытащить проект 'networkLib' в' usingLibDemo' будет легко отлаживать, поскольку исходный код есть. Но мне интересно, как Xcode получает исходный файл 'Utils.m' и полную информацию о стеке. –

+1

Поскольку XCode использует ссылку на все файлы, которые вы открыли недавно. Следовательно, он может открыть Utils.m. –

+0

Когда вы связываете только ваш код рамки в основном проекте, xcode не сможет получить доступ к файлам .m. В вашем случае он имеет доступ только потому, что запоминает ссылку на недавно открытые файлы. –

4

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

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

Это немного больно, но это работает, и вам не нужно делать проект библиотеки подпроектом, если вы этого не хотите.

5

Если кто-то будет иметь один и тот же вопрос в будущем (теперь я использую Xcode 8):

Вы можете:

  1. построить свой рамочный проект (в данном примере "networkLib")
  2. копировать выходные данные проекта («myNetKit.рамки «) для проекта назначения (» usingLibDemo «)
  3. прогоне проекта назначения (» usingLibDemo «) на устройстве
  4. процесс остановки
  5. запуск приложения с вашего устройства вручную (» usingLibDemo ")
  6. открытой рамки проекта и прикрепите к процессу вашего приложения (запущен на шаге 5). В Xcode 8: Debug-> Attach to Process-> Выберите имя вашего приложения.

Не забудьте установить некоторые точки останова в вашем проекте фреймворка.

Смежные вопросы