जब वे नहीं होते हैं तो Xcode डिबगर ऑब्जेक्ट को प्रिंट नहीं करता है और शून्य दिखाता है


165

जब किसी ऑब्जेक्ट को po <objectName>केवल एक प्रोजेक्ट के लिए प्रिंट करने का प्रयास करते समय Xcode एक त्रुटि दिखाता है ।

स्क्रीनशॉट

त्रुटि: संरचना को अमल में नहीं ला सकी: चर का आकार <varName> मान से असहमत है मान का आकार Execute में त्रुटिपूर्ण है, तैयार नहीं कर सकता

Xcode डिबगर भी सभी वस्तुओं को nil( selfबहिष्कृत) के रूप में दिखाता है , जब वे नहीं होते हैं ( NSLogसही आउटपुट दिखाता है, जैसा कि छवि में देखा गया है)। मुझे नहीं पता कि प्रोजेक्ट में क्या गलत है। हर दूसरी परियोजना ठीक काम करती है।

क्या कोई विचार है की यह क्या हो सकता है? (परियोजना की सफाई का कोई प्रभाव नहीं था।)


मेरे लिए यह किसी तरह के पॉइंटर मुद्दे की तरह लग रहा है, लेकिन मुझे यकीन है कि पूरी तरह से ईमानदार होना चाहिए। आप क्या करने / करने की कोशिश कर रहे हैं?
23:29 पर user2967030

3
त्रुटि उस प्रोजेक्ट के प्रत्येक ऑब्जेक्ट पर होती है । यहां तक ​​कि NSStringब्रेकपॉइंट के ऊपर एक लाइन बनाई गई!
बिनेरिअन

1
जैसा कि सवाल में कहा गया है, सफाई कुछ भी नहीं बदलती है? (, लेकिन कोशिश करने के लिए धन्यवाद। त्रुटि संदेश जोड़ा गया।
Binarian

3
क्या आप सुनिश्चित हैं कि आप अनुकूलन के बिना निर्माण कर रहे हैं? (-ओ ०)
आइसीआर

1
अनुकूलन न केवल परियोजना सेटिंग्स में, बल्कि लक्ष्य में भी सेट किया जा सकता है। वहाँ एम अटक गया था :(
तुलसी

जवाबों:


269

क्या आप वाकई "रिलीज़ मोड" में नहीं हैं?

यदि आप चर मानों को देखना चाहते हैं, तो आपको "डीबग मोड" में होना चाहिए (स्टार्ट / स्टॉप बटन के पास ऊपरी बाएँ कोने पर अपने प्रोजेक्ट नाम पर क्लिक करें, फिर "एडिट स्कीम ...", फिर "रन" सेटिंग्स, फिर " जानकारी "टैब, फिर" कॉन्फ़िगरेशन बनाएँ "। यहां" डीबग "सेट करें। यदि यह" रिलीज "पर था तो वह मामला था जिसे आपने सभी बुराइयों को देखा था)।


3
मेरे पास केवल एक कॉन्फ़िगरेशन है, कॉन्फ़िगरेशन को कैसे बदलना है ताकि यह एक जैसा हो debug configuration?
बिनियन

2
आह ठीक है, मैंने एक खाली प्रोजेक्ट बनाया और अब इसमें सभी अंतर देख सकते हैं Build Settings, परिनियोजन गुण Strip debug symbols during copyYES पर सेट किया गया था।
द्विवार्षिक

16
@ Alex1987 मैं सेट Strip debug symbols during copyकरने के लिए NOऔर Optimization Levelकरने के लिए None -O0इस परियोजना मेंBuild Settings
Binarian

32
दुर्भाग्य से, कुछ स्थितियों में lldb यह तब कर रहा है जब डिबग मोड में, अनुकूलन बंद करने के साथ, और डिबगिंग प्रतीकों मौजूद हैं। बग की रिपोर्ट करने के लिए समय है ।apple.com
ctpenrose

4
एक ही मुद्दा था - अनुकूलन स्तर "कोई नहीं" था। समस्या यह थी कि लिंक-टाइम ऑप्टिमाइज़ेशन (LTO) डिबग मोड के लिए "हाँ" पर भी सेट था।
pi3

38

मैंने डिबग कॉन्फ़िगरेशन के लिए "कोई नहीं" के लिए "अनुकूलन स्तर" निर्धारित किया है और इसने समस्या हल कर दी है।


2
मजेदार, यह काम नहीं किया। मैंने इसके विपरीत किया। मैंने स्विच किया Fastest, Smallest[-Os]और यह काम किया।
नैट हट

विभिन्न सुझावों के बहुत सारे, लेकिन इस एक (किसी के लिए डिबग अनुकूलन की स्थापना) ने इसे मेरे लिए निर्धारित किया।
देजल

29

सुनिश्चित करें कि आपकी योजना सेटिंग्स में एड्रेस सेनिटाइज़र बंद है। एड्रेस सेनिटाइज़र डिबगर के साथ अच्छी तरह से काम नहीं करता है।

  1. एडिट स्कीम (उत्पाद >> स्कीम >> एडिट स्कीम) पर जाएं, रन चुनें और डायग्नोस्टिक्स टैब पर जाएँ।
  2. सुनिश्चित करें कि "एड्रेस सैनिटाइज़र सक्षम करें" बंद है।

यहां छवि विवरण दर्ज करें


4
मेरे लिए यही समाधान था। जाहिरा तौर पर यह कारण हो सकता है बहुत सारे कारण हैं।
मैन्रो सेप

16

लगता है सबका अपना-अपना हल है।

मेरे लिए, मैं का उपयोग करें Objective-Cऔर Swiftएक ही समय में।

सबसे पहले, पर जाएँ TARGETS -> Build Settingsऔर खोजेंcode generation

तुम पाओगे Apple LLVM 6.0 और Swift Compiler

उनके Optimization Levelसभी को बदलें None, फिर डीबग करें, आपको मान मिल सकता हैnil

आश्चर्यजनक रूप से एक बार जब आप मूल्य देख सकते हैं, तो आप इस समस्या को स्थायी रूप से हल कर लेंगे, फिर आप इसे बदल सकते हैं जो Optimization Levelइसका उपयोग किया जा सकता है।


11

ऐसे और भी तरीके हो सकते हैं। मेरे लिए ऐसा इसलिए था क्योंकि डीबग बिल्ड के लिए "अन्य C फ्लैग्स" मान "-O2" पर सेट था। डीबग बिल्ड के लिए इसे बंद करने से समस्या हल हो गई।


9

फ़िल्टर्ड डीबग आउटपुट

मेरे लिए, Xcode डिबगर आउटपुट को फ़िल्टर कर रहा था। सुनिश्चित करें कि आपकी आउटपुट सेटिंग डीबगर आउटपुट या सभी आउटपुट है


6

मुझे बस इस मुद्दे का सामना करना पड़ा और पाया कि यह Deployment Postprocessing = YESबिल्ड सेटिंग्स में था।

NOइसे निश्चित करने के लिए इसे बदलना , जैसा कि नीचे स्क्रीनशॉट में देखा गया है:

यहां छवि विवरण दर्ज करें

Xcode संस्करण: OSX 10.9.5 पर 6.0.1 (6A317)


5

मैं बस एक समान समस्या में भाग जाता हूं: एक बिंदु पर अचानक Xcode डिबगर ने कुछ ऑब्जेक्ट प्रकार विशेष रूप से NSStrings (नल) के रूप में मुद्रित किया, हालांकि वे एक मूल्य के साथ आरंभीकृत थे। के माध्यम से छापा गया

NSLog(@"String value: %@", myString);

ऑब्जेक्ट के लिए सही मान दिखाया गया था।

भ्रामक! समस्या का समाधान करना आसान था: मैंने अभी Xcode बंद किया और अपने कंप्यूटर को पुनः आरंभ किया। मैं Xcode पुनरारंभ करने के बाद सब कुछ फिर से ठीक काम करता है :)।


5

Link-Time Optimization = Noबिल्ड सेटिंग्स में डिबग मोड के लिए सुनिश्चित करें ।


मैं अभी Xcode 8 में इस मुद्दे को अपने डायनेमिक फ्रेमवर्क बिल्ड सेटिंग्स पर ही पूरा करता हूँ! Thx
vmeyer

3
  1. डिलीट किया हुआ डाटा डिलीट करें
  2. काफी Xcode / पुनरारंभ करें
  3. स्वच्छ परियोजना

यह सब मेरे लिए है।


2

यहां के समाधान उस बग को भी ठीक करेंगे जहां आप error: <EXPR>:1:1: error: use of unresolved identifierहर बार जब आप poकिसी चर की कोशिश करते हैं तो देखते हैं ।

मेरे लिए यह उपाय था कि मैं जाऊं Build Settingsऔर खोजूं Optimization Levelऔर यह सुनिश्चित करूं कि प्रत्येक Debugसेटिंग को सेट किया गया था None


यह वास्तव में यह मेरे लिए तय किया। किसी भी विचार सेटिंग को अक्षम करने के लिए नकारात्मक पक्ष क्या है?
जैस्पर

1

निर्माण में "अन्य सी झंडे" पर जाएं और -o2 से -O0 तक डिबग मान सेट करें


0

मैं इसमें भी भाग चुका हूं और जब मैंने पाया कि मैं रिलीज़ मोड में था, मैं डिबग पर स्विच करता हूं ... कोई फिक्स नहीं। यह बताता है कि मुझे पहले एक साफ (cmd + Shift + k) करना था।

इसलिए मुझे लगता है कि ऐसा होता है कि रिलीज़ मोड में निर्मित होने के बाद सब कुछ विकसित नहीं होता है और इसलिए lldb प्रतीकों को ठीक से नहीं पढ़ सकता है। विकसित करने के लिए सफाई करने और फिर से काम करने के बाद इसने मेरे लिए काम किया।


-3

वास्तविकता यह है कि सिस्टम को बॉक्स से बाहर काम करना चाहिए और विभिन्न सेटिंग्स के कई मात्रा के लिंक के कारण नहीं, एक बिंदु पर कि चीजें आपके लिए काम कर सकती हैं, या नहीं।

डिबग मोड में सिस्टम हमेशा डिबग करने की अनुमति क्यों नहीं देता है, यह एक रहस्य है कि केवल Apple ही जवाब दे सकता है (यदि वे परवाह करते हैं, तो कौन सा लेट्ली मुझे संदेह है कि वे करते हैं)।

सब के बाद, डिबग / गैर-डिबग के बीच का अंतर मेटाडेटा के साथ अतिरिक्त तालिकाओं में होगा जो केवल मेमोरी / डिस्क स्थान में भरते हैं।

यदि आप सीधे सिम्युलेटर या डिवाइस के खिलाफ संकलन कर रहे हैं, तो आप उन अतिरिक्त मेगाबाइट का ध्यान नहीं रखेंगे।

इसलिए हमें अतिरिक्त छोरों को चलाने की जरूरत है, बस एक बहुत ही मूल और सादे चीज को करने की, जो कि पिछली शताब्दी से मैं जानता हूं कि सभी ठीक हैं।

और जोड़ने के लिए, मेरे लिए जो काम किया था वह "मोनोलिथिक" से "नहीं" (xcode 8) के लिंक-टाइम अनुकूलन "डिबग" पर बदल रहा था।


Xcode = बॉक्स से बाहर कोई पैकेज मैनेजर नहीं, स्वतः पूर्ण और अन्य सुविधाएँ इच्छाशक्ति पर काम करती हैं, संकलन समय बहुत बड़ा है, इत्यादि
zirinisp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.