我接管了一個相當大且複雜的項目。它的一部分是靜態的(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。
從nm
和otool
的輸出也不看起來可疑。
爲什麼LLDB(Xcode的調試器)找不到我的檔案?我如何告訴lldb文件在哪裏?
任何指針表示讚賞。
使用lldb的圖像查找 - 地址--verbose,我可以看到 「模塊:文件」是正確的,但「CompileUnit:」是完全錯誤的地址。我將調查 – below
調試信息存在於Mac OS X上的兩個地方:目標文件('.o'文件)和dSYM軟件包('.dSYM')中。當你編譯和測試一個程序時,Xcode通常會把調試信息留在'.o'文件中。當完成二進制文件的時候,通常會創建'.dSYM'來將所有的調試信息放在一個地方。靜態庫(ranlib檔案)是'.o'文件的集合。鏈接到'.a'庫的二進制文件將所有使用的調試信息複製到它的'.dSYM'中。所以 - 尋找一個'.dSYM'。並嘗試擴展'.a'庫('ar x libname.a')並用'dwarfdump'查找'.o'文件 –