2013-03-27 7 views
5

मेरे पास दो परियोजनाएं हैं, एक लॉगिन के लिए networkLib है और कुछ अन्य नेटवर्क फ़ंक्शन है, दूसरा usingLibDemo है। तो मेरे पास दोनों परियोजनाओं का स्रोत स्रोत है।मैं एक्सकोड में ढांचे में कैसे डिबग कर सकता हूं?

networkLib प्रोजेक्ट एक फ्रेमवर्क आउटपुट करता है, जिसे myNetKit.framework कहा जाता है, जिसका उपयोग usingLibDemo द्वारा किया जाता है।

enter image description here

अब मैं सफलतापूर्वक myNetKit.framework का उपयोग लॉगिन करने के लिए, लेकिन कभी कभी यह दुर्घटनाओं मुख्य में हो सकता है,() ढेर जानकारी के बिना, लेकिन कभी कभी Xcode मुझे नीचे की तरह ढेर की जानकारी देता है:

enter image description here

तो मुझे पता है, जहां यह दुर्घटनाओं:

enter image description here

लेकिन Utils.m खुलासा नहीं किया गया है, कैसे एक्सकोड को ढेर जानकारी और क्रैश लाइन मिलती है, और आखिरकार मेरे लिए स्रोत फ़ाइल खोलती है? क्योंकि मेरे पास मेरी डिस्क में स्रोत कोड है?

यदि हां, तो मैं myNetKit.framework चरण-दर-चरण कैसे डिबग कर सकता हूं, जब यह क्रैश नहीं होता है?

किसी भी सुझाव के लिए बहुत बहुत धन्यवाद।

उत्तर

3

आप अपनी परियोजना में संपूर्ण लाइब्रेरी (networkLib) प्रोजेक्ट भी जोड़ सकते हैं और प्रोजेक्ट सेटिंग्स में निर्भरता जोड़कर लाइब्रेरी को गतिशील रूप से लिंक कर सकते हैं। तो आपके पास अपनी परियोजना के भीतर सभी स्रोत कोड हो सकते हैं। तो आप इसे रन टाइम में डीबग कर सकते हैं।

+0

धन्यवाद, मुझे पता है कि 'networkLib' प्रोजेक्ट को 'libDemo' में उपयोग करके' डीबग करना आसान होगा, स्रोत कोड के लिए वहां है। लेकिन मुझे आश्चर्य है कि एक्सकोड को 'Utils.m' स्रोत फ़ाइल, और पूर्ण स्टैक जानकारी कैसे प्राप्त होती है। –

+0

मेरा अनुमान है कि फ्रेमवर्क डीबग प्रतीकों की निर्माण प्रक्रिया के दौरान छीन नहीं लिया गया था। मेरा मानना ​​है कि आपको इस तरह की जानकारी मिलती है। – David

-1

आपको प्रोजेक्ट नेटवर्कलिब को डीबग करना चाहिए जो फ्रेमवर्क को अलग से आउटपुट करता है। ढांचे में संरचना की तरह ऐप नहीं है इसलिए अन्य प्रोजेक्ट के भीतर एक फ्रेमवर्क फ़ाइल डीबग नहीं की जा सकती है।

+0

धन्यवाद, लेकिन कैसे Xcode Utils.m फ़ाइल प्राप्त करें? –

+0

अगर आपने केवल .framework फ़ाइल को एकीकृत किया है तो इसे डीबग नहीं किया जा सकता है। आप मैथ्यू वर्गीस – Yogi

+0

द्वारा उत्तर देने का भी प्रयास कर सकते हैं धन्यवाद, मुझे पता है कि 'networkLib' प्रोजेक्ट को 'libDemo' में उपयोग करके' डीबग करना आसान होगा, स्रोत कोड के लिए वहां है। लेकिन मुझे आश्चर्य है कि एक्सकोड को 'Utils.m' स्रोत फ़ाइल, और पूर्ण स्टैक जानकारी कैसे प्राप्त होती है। –

4

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

+0

धन्यवाद, मुझे पता है कि 'networkLib' प्रोजेक्ट को 'libDemo' का उपयोग करके' डीबग करना आसान होगा, स्रोत कोड के लिए वहां है। लेकिन मुझे आश्चर्य है कि एक्सकोड को 'Utils.m' स्रोत फ़ाइल, और पूर्ण स्टैक जानकारी कैसे प्राप्त होती है। –

+1

क्योंकि XCode हाल ही में खोले गए फ़ाइलों के संदर्भ का उपयोग करता है। इसलिए यह Utils.m खोलने में सक्षम है। –

+0

जब आप मुख्य प्रोजेक्ट में केवल अपना फ्रेमवर्क कोड बंडल करते हैं, तो xcode .m फ़ाइलों तक पहुंचने में सक्षम नहीं होगा। आपके मामले में, यह केवल इसलिए पहुंचने में सक्षम है क्योंकि यह हाल ही में खोले गए फ़ाइलों के संदर्भ को याद करता है। –

4

जब लाइब्रेरी सभी प्रतीकों के साथ बनाई गई है, तो इसमें प्रत्येक स्रोत फ़ाइल में स्वयं के लिए पूर्ण पथ शामिल हैं। यदि आप हेक्स व्यूअर के साथ .a खोलते हैं तो आप वास्तव में इसे देख सकते हैं। इस जगह के साथ, एक्सकोड को पता चलेगा कि स्रोत फ़ाइल कैसे प्राप्त करें।

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

यह थोड़ा दर्दनाक है लेकिन यह काम करता है और यदि आप नहीं चाहते हैं तो आपको लाइब्रेरी प्रोजेक्ट को उपप्रोजेक्ट बनाने की आवश्यकता नहीं है।

5

भविष्य में कोई एक ही सवाल (अब मैं Xcode 8 का उपयोग कर रहा है) चाहते हैं:

आप कर सकते हैं:

  1. अपने ढांचे परियोजना (इस उदाहरण में "networkLib") का निर्माण
  2. प्रतिलिपि परियोजना आउटपुट ("myNetKit।usingLibDemo ")
  3. खुला ढांचा परियोजना" आपके डिवाइस
  4. रोक प्रक्रिया
  5. मैन्युअल रूप से अपने डिवाइस से
  6. लांच एप्लिकेशन (पर) "रूपरेखा") गंतव्य परियोजना (करने के लिए "usingLibDemo")
  7. रन गंतव्य परियोजना ("usingLibDemo और अपने अनुप्रयोग (5 कदम में शुरू) की प्रक्रिया के लिए अनुलग्न Xcode 8 में:। Debug-> अपना ऐप की प्रक्रिया करने के लिए अनुलग्न करें> नाम का चयन

अपने ढांचे परियोजना में कुछ breakpoints सेट मत भूलना।।

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