'प्रोजेक्ट का नाम' अनुकूलन के साथ संकलित किया गया था - कदम अजीब तरीके से व्यवहार कर सकता है; चर उपलब्ध नहीं हो सकते हैं


210

AFNetworking कोड में कदम रखने की कोशिश चेतावनी के बाद उत्पन्न करता है:

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

और निश्चित रूप से मैं कोड डिबग करने में सक्षम नहीं हूं। विशिष्ट होने के लिए मैं UIImageView+AFNetworkingश्रेणी को डिबग करने की कोशिश कर रहा हूं जो असंभव लगता है। कोड बदलने का कोई प्रभाव नहीं है (कोशिश की NSLog, आदि) और जब संकलक में कदम रखने की कोशिश विधानसभा कोड में जाता है और UIImageView+TVASTAFNetworkingश्रेणी के नाम के रूप में दिखाता है जो कोड आधार में कहीं भी मौजूद नहीं है।

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

Xcode 7. iOS 9 और 8. कोकोपॉड्स (कोई फ्रेमवर्क) का उपयोग करना

अद्यतन मैं यह उल्लेख करना भूल गया कि ऑप्टिमाइज़र noneरिलीज़ और डिबग कॉन्फ़िगरेशन दोनों के लिए सेट है और मैं वास्तव में Debugकॉन्फ़िगरेशन का उपयोग कर रहा हूं ।

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

अद्यतन २

Strip Debug Symbols साथ ही बंद है।


मुझे याद है कि "स्ट्रिप डीबग सिंबल्स" के कुछ विकल्प हैं। शायद इस समस्या का कारण होगा। क्या यह बंद है?
कोई नहीं

1
@ कोई नहीं नाडा हां Strip Debug Symbolsबंद है।
मोजतबा

अजीब मैं सिर्फ स्ट्रिप डीबग सिंबल को चालू करने की कोशिश की, और चेतावनी 8- गायब हो गई
गोमिनो

@Mojtaba अरे, क्या आपको पता चला कि समस्या को कैसे हल किया जाए? मैं उसी समस्या के साथ फंस गया हूं जब से Xcode 7
Hadu

@Hadu: दुर्भाग्य से नहीं
Mojtaba

जवाबों:


175

यदि आपका प्रोजेक्ट स्विफ्ट का उपयोग कर रहा है, तो प्रोजेक्ट / लक्ष्य कॉन्फ़िगरेशन में दो अलग-अलग "अनुकूलन स्तर" सेटिंग्स हैं।

सुनिश्चित करें कि आपने उन दोनों को सही ढंग से सेट किया है:

  1. प्रोजेक्ट नेविगेटर फलक में अपनी परियोजना का चयन करें
  2. "परियोजना" पेड़ के नीचे अपनी परियोजना की सेटिंग चुनें
  3. "सेटिंग बनाएँ" टैब पर क्लिक करें
  4. "अनुकूलन स्तर" के लिए खोजें और आप दो सेटिंग्स देखेंगे, एक एलएलवीएम के लिए और एक स्विफ्ट के लिए।
  5. प्रश्न में बिल्ड कॉन्फ़िगरेशन के लिए उपयुक्त सेटिंग ( None [-O0]LLVM और None [-0none]स्विफ्ट के लिए) सेट करें ।

अनुकूलन के साथ संकलित किया गया था कदम उठाना विषमतापूर्ण व्यवहार हो सकता है उपलब्ध नहीं हो सकता है

ऐसा करने से मेरे लिए यह चेतावनी हल हो गई।


1
मिश्रित भाषा परियोजनाओं के साथ क्या ...?
Vive

LLVM और स्विफ्ट में क्या अंतर है? यह स्विफ्ट क्या मैं इस परियोजना में लिखा था और LLVM के लिए जो कुछ भी मैं की तरह डिबगर यानी चीजों में डीबगिंग के संबंध में कर रहा हूँ है कि है po, p, expr...?
हनी

124

ऐसा लगता है कि आपका प्रोजेक्ट रिलीज़ मोड में है। रिलीज़ मोड ऐप को बहुत सारे ऑप्टिमाइज़ेशन के साथ संकलित करता है, लेकिन डिबगर्स ऑप्टिमाइज़ेशन से घृणा करते हैं, इसलिए ऐप को मज़बूती से डिबग करने के लिए, आपको इसे डीबग मोड पर स्विच करना होगा जो ऑप्टिमाइज़ेशन को कम करता है और डीबगिंग जानकारी का एक गुच्छा जोड़ता है। इसे डिबग मोड में स्विच करने के लिए:

  • Xcode के ऊपरी-बाएँ कोने में अपनी योजना पर क्लिक करें।

Xcode के ऊपरी-बाएँ कोने में अपनी योजना पर क्लिक करें।

  • "योजना संपादित करें ..." चुनें

"योजना संपादित करें ..." चुनें

  • "बिल्ड कॉन्फ़िगरेशन" ड्रॉपडाउन पर क्लिक करें। और इसे डिबग मोड में बदलें।

"बिल्ड कॉन्फ़िगरेशन" ड्रॉपडाउन पर क्लिक करें।


8
मैं डिबग का उपयोग कर रहा हूं। और सुनिश्चित करें कि अनुकूलक बंद है।
मोजतबा

यह दिलचस्प था। इसलिए भी क्योंकि मैंने इसे रिलीज़ मोड में सेट कर दिया था , मेरे कुछ ब्रेकप्वाइंट हिट नहीं हो रहे थे जबकि कुछ अन्य हिट हो रहे थे (_ (¯) _ / ツ
Honey

59

यह चेतावनी केवल तब दिखाई देती है जब आप एक ब्रेकपॉइंट मारते हैं और स्रोत एक ऐसी परियोजना में होता है जहाँ अनुकूलन सक्षम होता है, जिससे आपको वास्तविक चर मान देखने से रोका जा सकता है (प्रत्येक वस्तु को शून्य के रूप में दिखाया जाता है, भले ही वह न हो)

मेरे मामले में, यह केवल तब हुआ जब एक कोकोपोड निर्भरता के माध्यम से कदम दर कदम डिबगिंग।

यहां तक ​​कि अगर आपके पास अपना मुख्य लक्ष्य और परियोजना सेटिंग्स हैं, तो सही तरीके से सेट करें (स्ट्रिप डीबग सिंबल = ऑफ, और ऑप्टिमाइज़ेशन स्तर कोई भी नहीं), आपको यह सुनिश्चित करने की आवश्यकता है कि यह पॉड प्रोजेक्ट से आपके ब्रेकपॉइंट को हिट करने के लिए समान है।

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


अन्य उत्तर पढ़ें, वे एक ही सुझाव दे रहे हैं। लेकिन वे मेरी परियोजना (उर्फ None [-O0]) में सभी बंद हैं
Mojtaba

2
मुझे पता है कि आपने कहा था कि यह आपके प्रोजेट में बंद है, जैसे यह मेरा था, लेकिन क्या आपने अपनी पॉड निर्भरता परियोजनाओं के कॉन्फ़िगरेशन पर एक नज़र डाली?
गोमिनो

Xcode 7 के साथ यहाँ भी यही समस्या है। संभवतः यह समस्या तब सामने आई जब मैंने ट्रेकरबर्ड लाइब्रेरी का उपयोग शुरू किया। लेकिन ब्रेकप्वाइंट मेरे अपने कोड के अंदर है।
माइक

1
पॉड्स प्रोजेक्ट के लिए, "प्रॉजेक्ट" अनुकूलन स्तर सेटिंग को किसी भी कार्य में नहीं बदलें। (कोई फली लक्ष्य के लिए कोई परिवर्तन नहीं)।
ooops

2
यह गलत है। जब आप pod installफिर से यह ओवरराइड हो जाएगा । इसे इस तरह बदलें ।
इयूलियन ओनोफ्रेई

13

यह बताता है कि एक पुराने प्रोजेक्ट (Xcode 7.x +) को नए Xcode 8.3 (8E162) में आयात करने के बाद, शायद कंपाइलर ऑप्टिमाइज़ेशन के कारण, स्विफ्ट कंपाइलर - ऑप्टिमाइज़ेशन लेवल डिफ़ॉल्ट रूप से फास्ट, सिंगल-फाइल ऑप्टिमाइज़ेशन द्वारा सेट किया गया था :

इससे पहले

इसे किसी से नहीं बदला, समस्या हल की:

उपरांत


मैंने यह किया। मेरे लिए काम नहीं किया। मैं ios बिल्ड में इस मुद्दे का सामना कर रहा हूं, जो यूनिटी द्वारा निर्मित है।
चांदनी

11

Editor-> Validate Settingsफिर सभी परिवर्तनों की पुष्टि करें। तब आपको मिलना चाहिएजगह में स्विफ्ट कंपाइलर ऑप्टिमाइजेशन लेवल

से डिबग सेट करें None


1
मैंने यह किया। मेरे लिए काम नहीं किया। मैं ios बिल्ड में इस मुद्दे का सामना कर रहा हूं, जो यूनिटी द्वारा निर्मित है।
चांदनी

9

यह मेरे लिए समाधान था ...

गिमिनो के उत्तर की पंक्तियों के साथ, यदि आप कोकोपोड्स का उपयोग कर रहे हैं, तो पॉडफाइल की तरह एक पंक्ति जोड़ें:

xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

या कोकोपोड्स संस्करणों के लिए> = 1.0 (थैंक्स डायजमन)

project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

जहाँ मायप्रोजेक्ट में 'डिबग - लोकल', 'डिबग - स्टेजिंग', 'डीबग - प्रोडक्शन' है, जबकि मानक 'डिबग' के अतिरिक्त डिबग कन्फ्यूजन है।

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


9

मैं आज उसी मुद्दे पर भागा, और यह पता लगाया (कम से कम मेरे मामले में)। मैं कोकोपोड्स का भी उपयोग कर रहा हूं, और अपने परीक्षण लक्ष्य (स्विफ्ट को ओब्जेक्ट से मिलाते हुए) चलाते समय मुझे यह समस्या हो रही थी।

मैं iOS 9.2 एसडीके के साथ Xcode 7.2 का उपयोग कर रहा हूं।

नीचे दी गई छवि में, आप मेरे परिवर्तन से पहले लक्ष्य और परियोजना के लिए अनुकूलन देख सकते हैं:

परिवर्तन से पहले अनुकूलन स्तर

आश्चर्य की बात है बात यह है कि भले ही हल हो गई अनुकूलन है कोई नहीं [-O0] , केवल से परियोजना सेटिंग में बदलाव करने के बाद -Os को -O0 संकलक लक्ष्य के अनुकूलन बंद किया था।

नीचे आप मेरी अंतिम सेटिंग देख सकते हैं:

परिवर्तन के बाद अनुकूलन स्तर


7

यह एक लंबा समय रहा है लेकिन मैंने आखिरकार इस मुद्दे को हल कर दिया है। एक तीसरा अनुकूलन ध्वज है LTOया Link Time Optimizationआश्चर्यजनक रूप से किसी ने भी यहां इसका उल्लेख नहीं किया है और किसी कारण से मैंने इस पर ध्यान नहीं दिया। इसके ठीक ऊपर हैOptimization Level सेटिंग जैसा कि आप यहां पोस्ट किए गए कई स्क्रीन शॉट्स में देख सकते हैं।

इसलिए इसे संक्षेप में बताने के लिए 3 अलग-अलग अनुकूलन झंडे हैं जिन्हें आप डिबगिंग के लिए बंद करना चाहते हैं:

  • एलएलवीएम लिंक समय अनुकूलन ( -flto)
  • LLVM अनुकूलन स्तर ( -O)
  • स्विफ्ट कंपाइलर ऑप्टिमाइज़ेशन लेवल

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

LTO: http://llvm.org/docs/LinkTimeOptimization.html के बारे में अधिक जानकारी


2
मैंने यह किया। मेरे लिए काम नहीं किया। मैं ios बिल्ड में इस मुद्दे का सामना कर रहा हूं, जो यूनिटी द्वारा निर्मित है।
चांदनी

@ खंडनी, यहां मैंने उसी समस्या का सामना किया, जिसका आपने हल खोज लिया?
रंजनी

2

यदि आपको अपनी स्विफ्ट पॉड्स के लिए अनुकूलन को अक्षम करने की आवश्यकता है, तो आप उन्हें डीबग कर सकते हैं, निम्नलिखित को अपने में जोड़ें Podfile। यह केवल डीबग बिल्ड के लिए ऑप्टिमाइज़ेशन को अक्षम करेगा।

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == "Debug"
        config.build_settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Onone"
      end
    end
  end
end

1

क्या आप सुनिश्चित हैं कि आपका डिबग कॉन्फ़िगरेशन कोड का अनुकूलन नहीं करता है (यह नहीं होना चाहिए)? ऐसा लगता है कि आपने डिबग कॉन्फ़िगरेशन के लिए गलती से सक्षम अनुकूलन कर लिया है और आपको इसे लक्ष्य की सेटिंग से बंद कर देना चाहिए।


3
अनुकूलन सब कुछ के लिए बंद है। यहां तक ​​कि रिलीज सिर्फ यह सुनिश्चित करने के लिए निर्माण
Mojtaba

@Mojtba लेकिन रिलीज़ मोड अनुकूलन को चालू करता है!
कोई नहीं।

0

यह त्रुटि मेरे साथ दो बार हुई, और हर मामले में URL पैरामीटर में एक गलती थी जो किसी सेवा का अनुरोध करने के लिए उपयोग की जाती थी। एक मामले में URL में पोर्ट सेक्शन में कुछ जगह थी, दूसरे मामले में कुछ वैकल्पिक मूल्य को अलिखित नहीं किया जा रहा था।

अतः यह सुनिश्चित करना था कि अनुरोध के लिए url अच्छी तरह से बनाया गया है। मेरे मामले के बारे में अधिक जानकारी, और समान रिपोर्टिंग यहाँ


0

मैंने जो कुछ भी किया है वह Product > Cleanमेरी परियोजना को साफ करने ( ) और फिर से चलाने के लिए है


0

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


0

यदि कोई व्यक्ति आंतरिक रूप से सी लाइब्रेरी का उपयोग करने वाली पॉड को डीबग करते समय इस समस्या का सामना कर रहा है, तो एक और बात यह है कि आपको थ्रेड में सूचीबद्ध अन्य सभी चीजों के अलावा इसे काम करने के लिए प्रोजेक्ट सेटिंग्स में बदलना होगा।

पोड्स प्रोजेक्ट सेटिंग्स पर जाएं -> आपका सी-टारगेटिंग टारगेट -> बिल्ड सेटिंग्स -> ऐपल क्लैंग - कस्टम कंपाइलर फ्लैग्स -> अन्य सी फ्लैग और -O3किसी भी तरह वहां मौजूद झंडे को हटा दें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.