2013-05-21 89 views
1

我有一個使用GNU make,clang等完整調試信息構建的進程(不是應用程序)。我想用lldb和GUI調試器來附加它,它顯示我的源代碼,可變綁定等。如何用XCode 4.6.2和lldb調試非xcode進程?

有沒有辦法在OS X 10.8上使用XCode 4.6.2或任何其他工具(例如一個適用於Emacs的工作lldb模式)?

我試着附加XCode 4.6.2,但它只顯示反彙編,我發現沒有辦法告訴它在哪裏尋找源代碼。有人建議編輯方案並設置自定義工作目錄,但文件夾選擇圖標被禁用。另一個建議添加文件...但這並沒有幫助。

使用普通lldb從Terminal.app進行附加顯示行號和源文件名(但不包含路徑名)。我找不到告訴lldb在哪裏查找源代碼的方法。

在gbd中,在命令行上,我可以使用dir命令來告訴它源位於哪裏,並使list命令起作用。如果我告訴XCode使用gbd(可以從「附加到進程/按進程標識符(PID)或名稱」菜單中選擇),但是XDB會從XCode中刪除gdb支持,所以XCode會顯示源代碼,因此此方法很快就會停止加工。

回答

1

您可以使用lldb中的target.source-map設置來提供映射。如果您在自己的系統上構建了該程序,我不確定爲什麼這是必要的 - 只有在源代碼位於一個位置(/tmp/original-directory)的情況下構建程序,然後將源移動到另一個位置位置(/tmp/new-directory)並嘗試調試。更常見的情況是,如果您在一個系統上構建,然後將所有內容移至第二個系統進行調試,但不要將源文件複製到同一位置,則會出現這種情況。

反正http://lldb.llvm.org/lldb-gdb.html展示瞭如何使用此方法,但在很短的例子,

(lldb) settings set target.source-map /buildbot/path /my/path 

會告訴LLDB到/buildbot/path所有出現替換到/my/path時,它正在尋找源代碼文件。您可以將此設置放入您的~/.lldbinit文件中以使其保持不變。

gdb的dir命令沒有直接的等價關係,但通常你可以用這種方法很容易地完成同樣的事情。

等待我剛纔看到了Xcode 4.2.3 bit ...這是lldb的一個非常舊的版本。強烈建議升級到Xcode 4.6,如果你打算使用lldb - 我不記得在Xcode 4.2中的lldb非常好...

+0

謝謝,我會試試這個。 (標題有錯誤的XCode版本) –

+1

target.source-map沒有工作。其中一個問題是,我不知道lldb正在嘗試(和失敗)尋找來源。另外,在我的情況下,路徑映射似乎固有地無用,在這種情況下,所有源文件與二進制文件構建時的位置完全相同。 根據http://lldb.llvm.org/lldb-gdb.html仍然沒有等同於gdb目錄命令。 有沒有辦法告訴XCode在哪裏看? –

+0

當您在其中一個應有源代碼的函數中停止時,請嘗試'image lookup -v -a ADDRESS'。這會告訴你lldb知道該地址的所有信息,包括源文件的完整路徑。可能是lldb找不到它,但Xcode不顯示源代碼 - 你可以嘗試命令行lldb('xcrun lldb')來確認是否是這種情況。注意:在更新的lldb中,更簡單的方法是使用'source list -a ADDRESS',但我不記得它是否適用於Xcode 4.6中的lldb。 –

0

多年後...第一個有用的調試器,可以處理我們的代碼在OS X上是Microsoft的VSCODE(目前VSCODE 1.9.1,帶有ms-vscode.cpptools 0.10.1)。那是意想不到的。