如何在LLDB的Swift應用程序中繪製變量的值?po LLDB with swift
早些時候就好像po variable_name
現在,我通常會得到一些討厭的錯誤,如:
(lldb) po a
error: <EXPR>:11:5: error: use of unresolved identifier '$__lldb_injected_self'
$__lldb_injected_self.$__lldb_wrapped_expr_2(
^
如何在LLDB的Swift應用程序中繪製變量的值?po LLDB with swift
早些時候就好像po variable_name
現在,我通常會得到一些討厭的錯誤,如:
(lldb) po a
error: <EXPR>:11:5: error: use of unresolved identifier '$__lldb_injected_self'
$__lldb_injected_self.$__lldb_wrapped_expr_2(
^
該錯誤聽起來像它可能是因爲矮是不會告訴LLDB在哪裏可以找到你的「自我」目的。鑑於Swift的性質,LLDB需要知道自我類型以便能夠在本地範圍內注入表達式 找出問題的一種方法是在LLDB提示符下執行:
(LLDB)框架變量-L自
你可能會看不到的位置吧。值得提交錯誤報告,只是爲了跟蹤您的具體情況攝製
不管怎樣,去你的大部分問題。在Swift中,沒有像ObjC那樣的「打印描述」的語言認可機制,所以雖然可以鍵入「po self」,除非self是Objective-C類型,但您幾乎可以看到「p self 「甚至」框架變量自我「會告訴你 - 完全基於LLDB數據格式化機制。如果你要掛鉤到該自定義您的斯威夫特對象的方式看,強制性的基準是:http://lldb.llvm.org/varformats.html
令人討厭的是,最終的Xcode 6已經發布,並且他們無法實現在調試過程中觀察任何變量值的基本功能。 –
@enrico:獲得Swift符號的藝術現狀是什麼 - 預計po會在純粹的swift物體上起作用嗎?是否有獲取數據的不同方法,並且是否需要特殊的構建設置?謝謝! –
「框架變量」與對象的打印描述沒有相同的結果。它打印幾乎無用的垃圾。 – poGUIst
我可以證實了同樣的錯誤,對於Xcode的BETA4和 框架變量-L自
顯示的東西,但似乎最糟糕的:
:(SwiftCollectionViewSample.DetailViewController)自我=
我會明確地提出了錯誤,恩里科
17819707 debugg呃打印錯誤:使用未解決的標識符「$ __ lldb_injected_self」
我得到了與XCode6 beta4相同的錯誤 –
我已經做了一些測試,以弄清楚它是如何工作與斯威夫特的,結果讓我吃驚了一下。通過ObjC對象po
調用debugDescription
,默認情況下調用description
。這很清楚。不幸的是,在使用Swift類時不適用。我專注於對象而不是打印單個變量。
要使其工作(在lldb
po
命令),我不得不重寫描述。下面的代碼我用來測試:
class Test : NSObject
{
var name : String?
var surname : String?
override var debugDescription : String{
return "debugDescription method"
}
override var description : String {
return "description Method"
}
}
測試:
let test = Test()
test.name = "name"
test.surname = "surname"
(lldb) po test
description Method
(lldb) p test
(DebugTest.Test) $R1 = 0x00007fce11404860 {
ObjectiveC.NSObject = {
isa = DebugTest.Test
}
name = "name"
surname = "surname"
}
(lldb) po dump(test)
▿ DebugTest.Test #0
- super: debugDescription method
▿ name: name
- Some: name
▿ surname: surname
- Some: surname
description Method
(lldb) po print(test)
description Method
令我驚訝的是,po
上斯威夫特對象調用description
而不是debugDescription
從ObjC不同的事情。
編輯
爲了使其作用就像ObjC,你的類必須實現CustomDebugStringConvertible然後po
將調用debugDescription
,默認情況下調用description
。這在我的例子被唯一改變的將被添加:
class Test : NSObject, CustomDebugStringConvertible
經過與XCode 7.0.1
和iOS SDK 9
,Swift 2.0
沒錯,斯威夫特調試是'println'目前依賴。 – Jack
我有一個類似的調試錯誤,只有當試圖檢查'let'常量;看到我的問題[這裏](http://stackoverflow.com/questions/26189424/how-to-view-value-of-swift-let-constant-in-xcode-6-debugger) - 原來是成爲Xcode 6中的一個bug。 –
似乎有一個代碼示例/項目出現了這些問題,需要編譯團隊的人員來訪問:https://devforums.apple.com/message/1106278#1106278。任何對這個原因的貢獻肯定會得到所有人的讚賞(並且肯定會成爲一個快樂的好人) –