2016-11-07 182 views
2

根據lldb官方指南,在調試會話期間(使用命令source list)查看源代碼的能力是通過爲源文件設置新路徑名來完成的。LLDB - 設置源代碼路徑

即,如果我在/ tmp中將項目編譯到一臺計算機上並將其部署到源代碼駐留在/ Users/Src /的另一臺計算機上,則應在部署計算機中運行lldb鍵入settings set target.source-map /tmp /Users/Src

但是,如果我從別人處獲得可執行文件並且不知道構建目錄,會發生什麼情況。也許源代碼的組織方式與構建的不同(但文件內容相同)。

我的問題是:

  1. LLDB是否知道如何搜索在提供的路徑遞歸匹配的源文件?

  2. 如何從mach-o可執行文件獲取原始路徑名?

這裏的命令的形式描述:

調試會話重新映射源文件路徑名。如果您的源文件不再與程序創建時位於相同的位置---也許程序建立在另一臺計算機上---您需要告訴調試器如何在其本地文件路徑中查找源代碼構建系統的文件路徑。

+0

我對lldb和osx都不熟悉,但我建議你嘗試'readelf -a'和'objdump -p'來從你的可執行文件中獲取一些路徑信息。但是'readelf'似乎在osx中​​不可用,http://stackoverflow.com/questions/3286675/readelf-like-tool-for-mac-os-x –

+0

感謝您的評論。然而,ORX可執行的二進制結構與ELF不同,稱爲MACH-O,但我會嘗試找到objdump的同義詞。 – Zohar81

回答

1

如果你知道有問題的代碼的函數名,這樣做:

(lldb) image lookup -vn <FunctionName> <BinaryImageNameContainingFunction> 

並查找CompileUnit項。這裏給出的路徑是從調試信息獲得的路徑lldb。