2016-03-28 10 views
5

xcode 7.3 में एक सेब बग के आसपास काम करने के लिए जहां कुछ ब्रेकपॉइंट्स मारते समय एक्सकोड उड़ाता है, हमें या तो CLANG_ENABLE_MODULE_DEBUGGING बंद करना होगा या xcode 7.2 के साथ रहना होगा। CLANG_ENABLE_MODULE_DEBUGGING को बंद करना बहुत अच्छा लगता है।CLANG_ENABLE_MODULE_DEBUGGING परिणाम बंद करना

एक सामान्य आईओएस डेवलपर कार्य वातावरण में CLang मॉड्यूल डीबग करने में सक्षम नहीं होने का वास्तव में क्या मतलब है? किसी को कैसे पता चलेगा कि क्लांग मॉड्यूल को सीधे या पारदर्शी रूप से किस प्रकार निर्भर किया जा रहा है?

यहाँ कि उड़ा समस्या के बारे में चर्चा है:

: https://forums.developer.apple.com/message/126468#126468

बजना मॉड्यूल को समझना और उन्हें डिबगिंग

यहाँ एक Introduction to Objective-C Modules

Apple Releases Xcode 7 Beta शीर्षक से एक अन्य स्रोत से

है

सी, सी ++ के लिए क्लैंग मॉड्यूल और प्रीकंपिल्ड हेडर, उद्देश्य-सी, और उद्देश्य-सी ++ में परिभाषित प्रकारों के लिए डीबग जानकारी होती है। जब Xcode स्थापित करने CLANG_ENABLE_MODULE_DEBUGGING साथ निर्माण = हाँ (डिफ़ॉल्ट रूप से सक्षम), प्रकार

मैं अपने कोको फलियाँ के एक जोड़े को देखने के लिए बजना भंडार संदर्भ @import जो संबंधित लगता है का उपयोग करें।

डीबग जानकारी का एक सामान्य उदाहरण क्या है जिसे हम इस से नहीं देख पाएंगे?

+0

मैं कहीं भी ऑनलाइन नहीं ढूंढ सकता कि CLANG_ENABLE_MODULE_DEBUGGING को कैसे बंद करें। क्या आप कृपया बता सकते हैं कि लिंक कैसे प्रदान करें या प्रदान करें? – FateNuller

+0

मुझे याद नहीं है कि कैसे xcode के माध्यम से। हालांकि, लाइन WHATEVER_YOUR_PROJECT.xcodeproj/project.pbxproj के XCBuild कॉन्फ़िगरेशन अनुभाग/* डीबग */बिल्ड सेटिंग्स में है। किसी भी कारण से, मैं इसे xcode के माध्यम से नहीं देखता हूं। – finneycanhelp

उत्तर

5

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

जब क्लैंग मॉड्यूल डिबगिंग बंद हो जाती है, तो प्रत्येक संकलन इकाई (.c, .m या .swift फ़ाइल) किसी भी प्रकार की प्रतिलिपि प्राप्त करेगी, और इसे स्थानीय रूप से संदर्भित करेगी।

तो इस "चालू" को चालू करने से बड़ी परियोजनाओं के लिए डीबग जानकारी के आकार को कम किया जा सकता है।

इसके अलावा, चूंकि डीबग जानकारी "ऑफ" मामले में काफी बड़ी हो सकती है, इसलिए संकलक डीबग आकार को प्रबंधित करने के लिए कुछ चाल बजाता है। उदाहरण के लिए, क्लैंग केवल डीबग जानकारी में प्रयुक्त प्रकारों को उत्सर्जित करता है, इसलिए यदि कुछ मॉड्यूल से कोई प्रकार है जो आपके प्रोग्राम में कोई भी उपयोग नहीं करता है, तो आपको उस प्रकार के लिए डीबग जानकारी नहीं मिलेगी। यह सामान्य रूप से एक बड़ी समस्या नहीं है, क्योंकि यदि आप कभी भी अपने कोड में किसी प्रकार का उपयोग नहीं करते हैं तो आप इसे अपने डिबगिंग में उपयोग करने की संभावना कम करते हैं। लेकिन यह कभी-कभी समस्याएं पैदा कर सकता है।

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

ओटीओएच, जब यह "चालू" होता है, क्योंकि संकलक जानता है कि इसे केवल एक बार यह जानकारी उत्पन्न करनी है, यह जो निकलता है उसके बारे में अधिक पूर्ण हो सकता है।अपने डिबग सत्र की शुरुआत में

(lldb) expr @import "FrameworkWhoseTypesOrSignaturesYouWant" 

:

उद्देश्य सी के लिए आप किसी भी लापता प्रकार/समारोह हस्ताक्षर मॉड्यूल का उपयोग कर रहे से आते हैं काम कर सकते हैं चलाकर।

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