2012-04-20 12 views
7

मैं कुछ भयानक UIView व्यवहार के माध्यम से डीबग करने की कोशिश कर रहा हूं और मैं उस मामले में चल रहा हूं जहां एलएलडीबी बिल्कुल बेकार और भ्रामक है। मैं आपको दिखा रहा क्या अर्थ है:एलएलडीबी का उपयोग कर वैध वस्तुओं को नील के रूप में क्यों दिखाया जाता है? (ऐप्पल एलएलवीएम कंपाइलर 3.1, एक्सकोड 4.3.1)

NSLog(@"myView: %@", myView); 

2012-04-20 15:24:57.070 myProj[35789:f803] myView: <MyView: 0x7cc7500; frame = (0 119; 768 885); layer = <CALayer: 0x7cc8030>> 

लेकिन जब मुझे लगता है कि सही समय पर एक ब्रेकपाइंट सेट और डिबगर उपयोग करने का प्रयास है, यह रिटर्न शून्य:

(lldb) po myView 
(MyView *) $552 = 0x00000000 <nil> 

मैं जीसीसी 4.2 के लिए स्थानांतरण की कोशिश करेंगे यह देखने के लिए कि क्या यह मदद करता है, लेकिन एलएलवीएम जीसीसी 4.2 के तहत संकलन एक विकल्प नहीं है क्योंकि यह एक एआरसी परियोजना है।

बेशक, एलएलडीबी काम करेगा यदि मुझे पहले से ही पूछताछ के लिए सही पता पता है। लेकिन प्रतीक वस्तुओं और पते के बीच का लिंक कुछ वस्तुओं के लिए टूटा हुआ प्रतीत होता है, हालांकि यह अन्य वस्तुओं के लिए काम करता है।

(lldb) po self 
(MyViewController *const) $51 = 0x07e92200 <MyViewController: 0x7e92200> 
(lldb) po myView 
(MyView *) $25 = 0x00000000 <nil> 
2012-04-20 15:44:17.250 myProject[37551:f803] myView: <MyView: 0x7e8e240; frame = (0 119; 768 885); layer = <CALayer: 0x7ea2330>> 
(lldb) po 0x7e8e240 
(int) $50 = 132702784 <MyView: 0x7e8e240; frame = (0 119; 768 885); layer = <CALayer: 0x7ea2330>> 

मैं इसे कैसे ठीक कर सकता हूं? मैंने स्वयं-> myView भी कोशिश की है, जो या तो काम नहीं करता है।

अपडेट: (यह खराब हो जाता है!)

मैं जोड़ने चाहिए कि MyView एक वर्ग चर, नहीं एक संपत्ति है, इस उदाहरण में (जहां lldb यह शून्य से संबद्ध करती है)। यदि मैं अपनी कक्षा को एक क्लास प्रॉपर्टी बनाता हूं और इसे @ सिंथेसाइज करता हूं, तो lldb एक गलत लेकिन अनुमानित मान प्राप्त करेगा और यह @Vynthesize से पहले हाल ही में संश्लेषित संपत्ति के साथ myView प्रतीक को संबद्ध करेगा। तो मेरे मामले में कोड इस तरह देखा:

@synthesize myDate=myDate_; 
@synthesize myView; 

तो जब LLDB से MyView के लिए संपत्ति का मूल्यांकन, यह myDate_ में संग्रहीत तारीख पता चलता है:

(lldb) po myView 
(MyView *) $24 = 0x07ca0900 2008-01-08 05:00:00 +0000 

पिछले मामले में, अगर मैं कर एक विधि चर MyView, LLDB सही हो जाएगा:

(lldb) po myView 
(UIView *) $7 = 0x07d81080 <MyView: 0x7d81080; frame = (0 119; 768 885); layer = <CALayer: 0x7d81b70>> 

यह LLDB अपने आप में एक बहुत स्पष्ट बग की तरह बदबू आ रही है।

अद्यतन 2:

इसके अलावा अनुसंधान: ऐसा लगता है वर्ग संपत्तियों की सभी तरह गलत कर रहे हैं! सूची में पहली संपत्ति एलएलडीबी में शून्य का मूल्य दिखाती है, और अन्य सभी इससे पहले संश्लेषित एक के मूल्य को दिखाते हैं।

क्या यह एक अजीब कॉन्फ़िगर त्रुटि हो सकता है?

+0

बीटीडब्ल्यू, आपको जीडीबी का उपयोग करने के लिए जीसीसी फ्रंटएंड के साथ अपने ऐप को फिर से कंपाइल करने की ज़रूरत नहीं है। यदि आप जीडीबी का उपयोग करना चाहते हैं, तो बस अपनी योजना के लिए डीबगर को जीडीबी में बदलें। आप एलएलवीएम 3 और एआरसी के साथ संकलन जारी रख सकते हैं। –

+0

यदि myView एक संपत्ति है, तो क्या आपने केवल संपत्ति का उपयोग करने का प्रयास किया है: 'po [self myView]' –

+0

हाँ मेरे पास है। एक ही समस्या है। – AlleyGator

उत्तर

0

समाधान ऐसा लगता है: डीबगर का उपयोग करने की कोशिश करते समय सिम्युलेटर में परीक्षण से बचें। एक बार जब मैंने डिवाइस पर परीक्षण करना शुरू कर दिया, तो सभी पागलपन चले गए और यह उम्मीद के अनुसार काम करना शुरू कर दिया। अगर मैं सिम्युलेटर पर वापस गया तो मैंने वही बग फिर से देखा। गुण और विधि चर दोनों सिमुलेटर में मुद्दों के लिए लग रहा था।

+0

यह सुनकर खुशी हुई कि आपको यह तय हो गया है! :) – slf

+0

इस पर अद्यतन करें: सिम्युलेटर का उपयोग करते समय एक्सकोड 4.3.1 पर lldb एक बग था। मैंने इस पर एक रडार दायर किया और ऐप्पल 4.4.1 में तय हुआ। http://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/_index.html#//apple_ref/doc/uid/TP40001051-SW163 – AlleyGator

0
frame variable -o myView 

More here 'मौजूदा स्टैक फ्रेम राज्य' शीर्षक के तहत।

+0

(lldb) फ्रेम चर MyView त्रुटि: कोई नामित चर 'MyView' इस फ्रेम – AlleyGator

+0

-O पैरामीटर में पाया इसी तरह काम करता है: (lldb) फ्रेम चर -O MyView त्रुटि: कोई चर नाम 'MyView' इस में पाया फ्रेम – AlleyGator

+0

तो मुझे एहसास हुआ कि मैं गति के लिए सिम्युलेटर के खिलाफ परीक्षण कर रहा था, और डिवाइस के खिलाफ परीक्षण किया था। एलएलडीबी ने पूरी तरह से काम करना शुरू कर दिया। फिर से सिम्युलेटर के खिलाफ परीक्षण: टूटा हुआ। डिवाइस के खिलाफ परीक्षण किया गया: फिर से तय किया गया। तो मुझे लगता है कि कहानी का नैतिक यह है कि एलएलडीबी में सिम्युलेटर के साथ असीमित बग हो सकती है। – AlleyGator

8

सुनिश्चित करें कि आपका बिल्ड कॉन्फ़िगरेशन डीबग पर सेट है, न कि AdHoc, रिलीज, या कुछ और जो डीबग प्रतीकों को स्ट्रिप्स करता है या एंटाइटेलमेंट फ़ाइल में डिबगिंग को अस्वीकार करता है।

यह मुझे थोड़ा सा है क्योंकि मैं अपने डिवाइस के लिए विज्ञापन बनाने के बाद कॉन्फ़िगरेशन को डीबग पर वापस स्विच करना भूल गया था। आश्चर्यजनक रूप से, अधिकांश ऐप काम करता था, लेकिन कुछ स्टैक फ्रेम चुपचाप और निष्पक्ष रूप से विफल हो जाएंगे, सभी चर (self सहित) या तो शून्य या उलझन में।

+0

भयानक। :) आपने मेरा $$ बचाया – alternatiph

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