2014-07-16 29 views
33

एलएलडीबी के साथ एक स्विफ्ट ऐप में चर के मूल्य को कैसे प्लॉट कर सकता हूं?पीएलडीबी में तेजी से

इससे पहले यह की तरह 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(  
    ^
+3

हाँ, स्विफ्ट में डिबगिंग वर्तमान में 'println' पर निर्भर है। – Jack

+0

मेरे पास एक समान डीबगर त्रुटि थी जो 'चलो' स्थिरांक का निरीक्षण करने की कोशिश करते समय ही हुई थी; इसके बारे में मेरा प्रश्न देखें [यहां] (http://stackoverflow.com/questions/26189424/how-to-view-value-of-swift-let-constant-in-xcode-6-debugger) - यह निकला एक्सकोड 6 में एक बग बनें। –

+0

कंपाइलर टीम के व्यक्ति (ओं) से इन समस्याओं को प्रदर्शित करने वाले कोड नमूने/परियोजनाओं के लिए एक कॉल प्रतीत होता है: https://devforums.apple.com/message/1106278#1106278। उस कारण में किसी भी योगदान की निश्चित रूप से सभी की सराहना की जाएगी (और निश्चित रूप से एक मजेदार-अच्छा साथी होगा) –

उत्तर

16

कि त्रुटि लगता है जैसे कि यह हो सकता है क्योंकि बौना LLDB बता जहाँ आपके "स्व" खोजने के लिए नहीं कर रहा है वस्तु। स्विफ्ट की प्रकृति को देखते हुए, एलएलडीबी को अपने स्थानीय दायरे के अंदर एक अभिव्यक्ति इंजेक्ट करने में सक्षम होने के लिए स्वयं के प्रकार को जानने की आवश्यकता है, यह पता लगाने का एक तरीका है कि एलएलडीबी प्रॉम्प्ट पर आपकी समस्या है या नहीं:

(एलएलडीबी) फ्रेम परिवर्तनीय -एल स्वयं

शायद आप इसके लिए कोई स्थान नहीं देख रहे हैं। इसके लिए एक बग रिपोर्ट दर्ज करने के लायक, बस अपने विशिष्ट रेपो केस

को ट्रैक करने के लिए, अपने प्रश्न का बड़ा हिस्सा प्राप्त करने के लिए। स्विफ्ट में, ओबीजेसी के लिए "प्रिंट विवरण" के लिए कोई भाषा-स्वीकृत तंत्र नहीं है, इसलिए जब आप "पीओ स्वयं" टाइप कर सकते हैं, जब तक कि स्वयं एक उद्देश्य-सी प्रकार न हो, तो आप वही चीज़ देखेंगे जो "पी स्वयं "या यहां तक ​​कि" फ्रेम चर स्वयं "आपको बताएगा - जो पूरी तरह से एलएलडीबी डेटा स्वरूपण तंत्र पर आधारित है। आप जिस तरह से अपनी स्विफ्ट वस्तुओं देखो अनुकूलित करने के लिए कि में हुक चाहते हैं, अनिवार्य संदर्भ है: http://lldb.llvm.org/varformats.html

+4

यह कष्टप्रद है कि अंतिम एक्सकोड 6 जारी किया गया है और वे डीबगिंग के दौरान किसी भी परिवर्तनीय के मूल्य को देखने के लिए मूलभूत सुविधा लागू नहीं कर सके। –

+0

@enrico: स्विफ्ट प्रतीकों के लिए कला की वर्तमान स्थिति क्या है - क्या पीओ शुद्ध त्वरित वस्तुओं पर काम करने की उम्मीद है? क्या डेटा प्राप्त करने का कोई अलग माध्यम है, और क्या इसके लिए विशेष बिल्ड सेटिंग्स की आवश्यकता है? धन्यवाद! –

+0

"फ्रेम वैरिएबल" ऑब्जेक्ट का प्रिंट विवरण के समान परिणाम नहीं मिलता है। यह लगभग बेकार कचरा प्रिंट करता है। – poGUIst

1

मैं Xcode beta4 के लिए एक ही त्रुटि पुष्टि कर सकते हैं, और फ्रेम चर एल स्वयं

कुछ

प्रदर्शित करता है , लेकिन सबसे खराब लगता है:

: (SwiftCollectionViewSample.DetailViewController) स्वयं =

मैं निश्चित एक बग दायर करेंगे, एनरिको

17819707 debugg एर प्रिंट्स त्रुटि: अनसुलझा पहचानकर्ता '$ __ lldb_injected_self' का उपयोग

+0

मुझे एक्सकोड 6 बीटा 4 के साथ एक ही त्रुटि मिली –

1

मैंने स्विफ्ट के साथ काम करने के तरीके के बारे में कुछ परीक्षण किए हैं, परिणाम मुझे आश्चर्यचकित कर रहे हैं। ObjC ऑब्जेक्ट्स के साथ podebugDescription पर कॉल करता है जो डिफ़ॉल्ट रूप से description पर कॉल करता है। यह स्पष्ट है। दुर्भाग्यवश स्विफ्ट कक्षाओं के साथ काम करते समय भी लागू नहीं होता है। मैंने एकल चर मुद्रण के बजाय वस्तुओं पर ध्यान केंद्रित किया।

इसे काम करने के लिए (polldb में कमांड) मुझे विवरण ओवरराइड करना पड़ा। नीचे दिए गए कोड मैं परीक्षण के लिए इस्तेमाल किया:

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 लागू करने के लिए और फिर podebugDescription फोन करेगा, जो डिफ़ॉल्ट रूप से कहता है description।केवल एक चीज है जो मेरे उदाहरण में परिवर्तित करना जोड़ने की जाएगी:

class Test : NSObject, CustomDebugStringConvertible 

Reference

XCode 7.0.1 और iOS SDK 9 साथ की जाँच की, Swift 2.0

संबंधित मुद्दे