2013-03-27 54 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'源文件以及完整的堆棧信息。 – 2013-03-27 09:25:58

+0

我的猜測是,在框架的構建過程中,調試符號未被剝離。我相信你會得到這樣的信息。 – David 2014-01-12 10:23:43

-1

您應該調試單獨輸出框架的項目networkLib。該框架沒有類似結構的應用程序,因此其他項目中的框架文件無法調試。

+0

謝謝,但如何Xcode獲取Utils.m文件? – 2013-03-27 09:04:29

+0

如果您只集成了.framework文件,則無法進行調試。您也可以嘗試通過Mathew Varghese回答 – Yogi 2013-03-27 09:18:31

+0

謝謝,我知道將'networkLib'項目拉入'usingLibDemo'將很容易調試,因爲源代碼就在那裏。但我想知道Xcode如何獲取'Utils.m'源文件以及完整的堆棧信息。 – 2013-03-27 09:26:43

4

在Xcode工作空間,當你處理多個框架項目。當您使用工作區時,斷點將起作用,並且您可以在不加載來回調試的情況下找到崩潰。從長遠來看,管理你的框架會容易得多。

+0

謝謝,我知道將'networkLib'項目拉入'usingLibDemo'將很容易調試,因爲源代碼就在那裏。但我想知道Xcode如何獲取'Utils.m'源文件以及完整的堆棧信息。 – 2013-03-27 09:24:53

+1

因爲XCode使用最近打開的任何文件的引用。因此它可以打開Utils.m。 – 2013-03-27 09:39:25

+0

當您只將框架代碼捆綁到主項目中時,xcode將無法訪問.m文件。在你的情況下,它可以訪問,因爲它記住了最近打開的文件的引用。 – 2013-03-27 09:48:00

4

當庫與所有符號建成,它包含完整路徑嵌入在自己的每一個源文件。如果使用十六進制查看器打開.a,您實際上可以看到這一點。有了這個,XCode將知道如何到達源文件。

設置斷點更具挑戰性。您基本上必須讓XCode通過逐步進入這些文件中的方法,從您的庫中慢慢發現源文件。一旦XCode打開文件,您可以在其中的任何位置設置斷點。

這是一個有點痛苦,但它的工作原理,你不必使圖書館項目的一個子項目,如果你不想。

5

如果有人將不得不在未來同樣的問題(我現在用的Xcode 8):

您可以:

  1. 構建框架項目(在這個例子中 「networkLib」)
  2. 複製項目輸出(「myNetKit。框架 「)於目標項目(」 usingLibDemo 「)
  3. 運行目標項目(」 usingLibDemo usingLibDemo「)
  4. 開放框架項目 」)的設備
  5. 停機過程
  6. 從設備
  7. 推出應用程序手動(上「和Attach to Process(在步驟5中啓動)在Xcode 8中:調試 - >附加到進程 - >選擇你的應用的名稱

不要忘記在你的框架項目中設置一些斷點。