2012-10-19 72 views

回答

23

target.source-map設置允許您在調試會話中定義一系列a => b路徑重新映射。它與gdb dir命令不同,該命令是按基本名稱搜索源文件的目錄列表,但您可以使用source-map解決相同的問題。這裏有一個例子,我移動源文件到一個隱藏目錄編譯後:

% cd /tmp 
% echo 'int main() { }' > a.c 
% clang -g a.c 
% mkdir hide 
% mv a.c hide/ 
% xcrun lldb a.out 
(lldb) settings set target.source-map /tmp /tmp/hide 
(lldb) l -f a.c 
    1 int main() { } 
(lldb) br se -n main 
Breakpoint created: 1: name = 'main', locations = 1 
(lldb) r 
Process 21674 launched: '/private/tmp/a.out' (x86_64) 
Process 21674 stopped 
* thread #1: tid = 0x1f03, 0x0000000100000f49 a.out`main + 9 at a.c:1, stop reason = breakpoint 1.1 
    #0: 0x0000000100000f49 a.out`main + 9 at a.c:1 
-> 1 int main() { } 
(lldb) 

有關此設置,在LLDB型set list target.source-map更多信息。如果您可能已通過執行apropos path在lldb中發現了這一點,將列出名稱/說明中包含單詞路徑的所有命令/設置。看到這個名稱有一個設置,你會做settings list看到設置列表,並發現它是根據target.提交的。

+0

傑森,謝謝你澄清的用法,並提供一個很好的自我解釋的例子! (「一張圖片勝過千言萬語」;-)希望您不要介意使用此示例作爲更新「GDB TO LLDB命令映射」(http://lldb.llvm.org/lldb-gdb)的建議。 HTML)。 /關心,拉爾斯。 – IODEV

+0

是的,唯一的問題是target.source-map與dir不是一回事;它相當於gdb的路徑名替換設置。 Xcode在後臺使用路徑名替換,但用戶通常不知道它。我們需要添加一個類似於gdb的dir命令的命令,以便在某些時候使用lldb。 –

+3

關於我從這個答案中錯過的唯一的東西,將是如何找到構建它時使用的源路徑。如果我連接到遠程機器,我經常不知道使用了什麼路徑,我希望可以讓lldb向我展示它想要找到源文件的路徑,以便我可以正確地源映射它。 – lundman