2012-04-17 24 views
14

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

ऐसा कुछ ऐसा लगता है जो आईओएस विकास में आया था, जहां मेरा विकास पर्यावरण (स्पष्ट रूप से) एक्सकोड और जिस भाषा में मैं प्रोग्रामिंग कर रहा हूं वह उद्देश्य सी है। मैंने चारों ओर गुगल किया है लेकिन वह सक्षम है कुछ भी ढूंढें - इसलिए मैंने सोचा कि मैं समुदाय से पूछूंगा।

क्या किसी को पता है कि क्या उद्देश्य सी में प्रोग्रामिंग करते समय एक्सकोड में हॉट स्वैप कोड का कोई तरीका है?

अग्रिम धन्यवाद

+1

Xcode इस किया करते थे लेकिन यह IIRC धीमी और अविश्वसनीय थी और लोगों को अभी इसका इस्तेमाल नहीं किया, इसलिए एप्पल सुविधा को मार डाला बस बनाने पर ध्यान केंद्रित करने डिबगर बेहतर। – Chuck

+0

एक शर्म की बात है, क्या आप किसी भी डीबगिंग सुविधाओं के बारे में जानते हैं जो समान/समकक्ष कार्यक्षमता प्रदान करते हैं? मैं कई बार एक चर बदलता हूं और पुनर्निर्माण करता हूं और यह देखने के लिए चलाता हूं कि यह सही संख्या है (गेम देव बहुत परीक्षण और त्रुटि है) – Salman

+0

यदि यह एक चर में है, तो आप बस इसके मूल्य को संपादित कर सकते हैं डिबगर। –

उत्तर

11

वर्तमान उपकरणों के साथ संभव नहीं है।

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

वैसे, एक्सकोड संस्करण 1.x-3.x में "फिक्स एंड जारी" सुविधा थी। आप डिबगिंग के रूप में संपादित कर सकते हैं, फिक्स और जारी रखें आदेश का उपयोग करें, और अद्यतन कोड को जारी रखना जारी रखें। मेरा मानना ​​है कि इसे किसी बिंदु पर हटा दिया गया था, शायद कुछ संयोजन के कारण: यह आवश्यक है कि आपकी परियोजना को "शून्य लिंक" और शायद कुछ अन्य चीजों का उपयोग करने के लिए कॉन्फ़िगर किया जाए; पूरी तरह से विश्वसनीय से कम होना; शायद आईओएस का समर्थन नहीं कर रहा है; llvm के लिए स्विच; एक्सकोड 4 में अन्य बदलाव। शायद यह किसी दिन वापस आ जाएगा - अगर आप इसे वापस चाहते हैं, तो एक बग फाइल करें - लेकिन फिर, मुझे लगता है कि आईओएस पर इसका समर्थन करना एक चुनौती होगी।

+0

यह उत्तर पुराना प्रतीत होता है। @ बार्टोसज़-हर्नस [उत्तर] (http://stackoverflow.com/a/16463529/273628) ने मुझे एक्सकोड 7.1 संगत समाधान के रूप में इंगित किया है: [इंजेक्शनप्लगिन] (https://github.com/johnno1962/injectionforxcode)। – ajh158

6

यदि आप परिवर्तनीय मूल्यों को बदलने के बारे में बात कर रहे हैं तो आप lldb (या, संभवतः) gdb के माध्यम से उस आत्मसमर्पण से प्राप्त कर सकते हैं। आप मान था:

- (void)uselessMethod 
{ 
    NSString *localString = @"I'm some local text"; 

    NSLog(@"%@", localString); 
} 

और, NSLog पर एक ब्रेकपाइंट डाल उस बिंदु पर आप इसे प्रदर्शन के साधन के रूप localString के पुनर्निर्धारण का मूल्यांकन करने के lldb कह सकते हैं। जैसे

po localString = @"Hat" 

यदि आप प्रोग्राम निष्पादन जारी रखने की अनुमति देते हैं, तो आपको यह पता होना चाहिए कि पुन: असाइनमेंट फंस गया है। इसी तरह आप किसी भी विधि को कॉल कर सकते हैं या किसी अन्य प्रकार के असाइनमेंट कर सकते हैं।

मैंने अभी एक्सकोड 4.3.2 के खिलाफ इसका परीक्षण किया है।

+0

तो आप जो कह रहे हैं वह यह है कि यह एक्सकोड टर्मिनल के भीतर संभव है (यदि मैं एलएलडीबी को कंपाइलर के रूप में उपयोग कर रहा हूं - वर्तमान में मैं जीडीबी का उपयोग कर रहा था लेकिन केवल इसलिए कि यह डिफ़ॉल्ट था), लेकिन इसमें 1) ब्रेकपॉइंट सेट किया जाएगा, और 2) टर्मिनल में दर्ज आदेश जो कि अगर उन्होंने समस्या हल की है, तो उन्हें मैन्युअल रूप से वास्तविक कोड में ले जाया जाएगा। क्या मैंने इसे सही ढंग से समझा? – Salman

+0

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

13

एक शानदार प्लगइन है जो लाइव, काम करने वाले एपीपी में कोड बदलने की अनुमति देता है। इसे इंजेक्शनप्लगिन कहा जाता है।

पूछे जाने वाले प्रश्न के रूप में कहते हैं:

यह कैसे काम करता है? ऑब्जेक्टिव-सी रनटाइम आपको एक बंडल का उपयोग करके किसी क्लास का एक नया संस्करण लोड करने की इजाजत देता है, भले ही एप्लिकेशन में पहले से ही कार्यान्वयन हो। स्विजलिंग का उपयोग नए कार्यान्वयन के तरीकों का उपयोग करने के लिए मौजूदा वर्ग को स्विच करने के लिए बंडल को लोड किया जाता है। यह बार-बार किया जा सकता है और ओएसएक्स और आईओएस अनुप्रयोगों और आईओएस उपकरणों पर काम करता है।

मैं कुछ छोटे वीडियो जो स्थापित करने और उपयोग करने के लिए कैसे इस प्लगइन http://nomtek.com/developers/how-to-install-and-use-injection-plugin-for-xcode/

आशा है कि यह मदद करता है से पता चलता कर दिया!

expression <variable> = <value>;:

+0

दुर्भाग्यवश यह एक्सकोड 5 के साथ डिवाइस पर काम नहीं करता है। – openfrog

1

आप गर्म द्वारा Xcode में एक चर मूल्य स्वैप कर सकते हैं।

उस स्थान पर ब्रेक पॉइंट करके जहां आप मूल्य बदलना चाहते हैं और एक्सकोड कंसोल में कमांड करना चाहते हैं।

उदाहरण:

// Messages From Console 
(lldb) expression graphFlag = @"X"; // Update variable value 
(__NSCFConstantString *) $0 = 0x36f95718 @"X" // Xcode prints the updated value 
(lldb) expression graphFlag; // Printing value through expression command 
(__NSCFConstantString *) $1 = 0x36f95718 @"X" // Hot Swapped variable value 
संबंधित मुद्दे