2017-01-17 51 views
12

我在我的iOS應用程序中編譯了另一臺機器上的dylib框架。 我檢查了來源我的機器上,並試圖指示lldb映射使用源代碼路徑:將源代碼附加到Xcode中的二進制dylib中

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix 

都無濟於事,仍然能看到裝配。

注意#1:dylib是從相同版本的Xcode中的C++代碼編譯而來的。

注#2:我使用nm -pa /path/to/dylib來確定文件路徑是否嵌入到調試信息中,並且它們是lldb由於某種原因不能播放。

感謝

UPDATE

我已經按照下面吉姆·英厄姆的答案,並創建了自動化此腳本,該腳本可以作爲這篇文章的主旨鏈接我寫道:https://medium.com/@maxraskin/background-1b4b6a9c65be

回答

4

要調試構建在一臺機器上但在另一臺機器上進行調試的代碼,您必須構建一個dSYM,並在您正在調試的機器上具有該功能。如果你還沒有這樣做,沒有什麼可行的。

接下來要檢查的是lldb正在拾取dSYM。此頁面有這個過程是如何工作的一些介紹:

http://lldb.llvm.org/symbols.html

但如果一切都失敗了,你可以使用add-dsym命令手工添加。

如果仍然沒有解決你的問題,然後挑選一些符號在你的dylib,並做到:

(lldb) image lookup -vn <SYMBOL_NAME> 

或交替在加載dylib找到一些地址,並做到:

(lldb) image lookup -va <ADDRESS> 

如果lldb找到了dSYM並且調試信息是正確的,則其中一行輸出應該是「編譯單元」的條目。這就是調試信息所說的源文件的路徑。該路徑的適當基礎是您應該在target.source-map中使用的基礎。如果您沒有看到該條目,那麼該編譯單元的調試信息會以某種方式丟失。

如果所有這些東西看起來不錯,並且lldb仍然沒有看到源文件,那麼您可能會遇到一個錯誤,在這種情況下請提出http://bugreporter.apple.com的錯誤。

+0

感謝您的詳細回覆,這工作,我確實缺少dSYM。我使用了'add-dsym'並指出了dSYM路徑,然後我使用'image lookup -vn '來獲得一個符號源代碼路徑,然後使用'settings set target.source-map/path/prefix /我/得到/從/查找/路徑/前綴/上/我/機器。 –

+0

要自動執行此操作,我將使用http://lldb.llvm.org/symbols.html中的說明。 –

+0

btw - 用於調試dylib的構建,是否需要dSYM,或嵌入在矮文件中的數據是否相同? –