2013-12-11 52 views
0

我接管了一個相當大且複雜的項目。它的一部分是靜態的(C++)庫,它是由一個Xcode文件製作(這實際上是由CMake的生成,我認爲...)Xcode調試器沒有找到我的文件

應用程序本身是在一個完全不同的項目。

當調試應用程序和想一步到庫中,只有組件被示出。這些符號似乎都在那裏,突出顯示輸出開始與MyApp'Foo::bar(char const*) at Foo.cpp:102:,我看到的東西,如0x1507a6: bl 0x150838 ; Foo::fazbar(int) at Foo.cpp:206

這對我來說,符號化是在那裏,實際上工作。

現在,Foo.cpp在我的機器上。我可以打開該文件,並且確實在第206行調用了Foo :: fazbar。

nmotool的輸出也不看起來可疑。

爲什麼LLDB(Xcode的調試器)找不到我的檔案?我如何告訴lldb文件在哪裏?

任何指針表示讚賞。

+0

使用lldb的圖像查找 - 地址--verbose,我可以看到 「模塊:文件」是正確的,但「CompileUnit:」是完全錯誤的地址。我將調查 – below

+1

調試信息存在於Mac OS X上的兩個地方:目標文件('.o'文件)和dSYM軟件包('.dSYM')中。當你編譯和測試一個程序時,Xcode通常會把調試信息留在'.o'文件中。當完成二進制文件的時候,通常會創建'.dSYM'來將所有的調試信息放在一個地方。靜態庫(ranlib檔案)是'.o'文件的集合。鏈接到'.a'庫的二進制文件將所有使用的調試信息複製到它的'.dSYM'中。所以 - 尋找一個'.dSYM'。並嘗試擴展'.a'庫('ar x libname.a')並用'dwarfdump'查找'.o'文件 –

回答

1

你有沒有比較的圖書館建時,搬來搬去的源文件?

+0

不,代碼保持在原來的位置,實際上,庫的二進制文件它保留在原來的位置,並且與它的建立位置有聯繫 – below

+0

問題在於錯誤的二進制文件被鏈接了!它包含了在其他人*機器上的源文件。使用正確的二進制文件解決了問題... – below

相關問題