2009-04-23 17 views
27

डीबगिंग आप सी ++ एप्लिकेशन में एम्बेडेड लुआ कोड कैसे डिबग करते हैं?एम्बेडेड लुआ

जो मैं इकट्ठा करता हूं, उससे मुझे अपने विशेष लुआ रनटाइम (यूघ) में एक विशेष आईडीई और लिंक खरीदने की आवश्यकता होती है। या मुझे lua debug API कॉल का उपयोग करके, गेम इंजन में डीबग कंसोल बनाने की आवश्यकता है।

मैं अपना खुद का डीबग कंसोल लिखने की ओर झुका रहा हूं, लेकिन ऐसा लगता है कि यह बहुत काम करता है। समय है कि मैं खेल के अन्य हिस्सों को चमकाने में बेहतर खर्च कर सकता हूं।

उत्तर

10

आसपास के कई उपकरण हैं जो आप चाहते हैं कि कम से कम कुछ हिस्सों को कर सकते हैं। मैंने वीएस प्लगइन के संदर्भ देखे हैं, विंडोज के लिए लुआ में एक विज्ञान डीबगर एक्सटेंशन है, और केप्लर प्रोजेक्ट का RemDebug, साथ ही उनके LuaEclipse भी है।

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

एक बड़ा मुद्दा गेम स्क्रिप्ट को आपकी स्क्रिप्ट के आस-पास के किसी भी सैंडबॉक्स के भीतर से मनमाने ढंग से मॉड्यूल लोड करने की क्षमता हो सकती है। यदि आपके पास इंजन पर कुछ नियंत्रण है, तो यह एक बड़ी समस्या नहीं होगी।

यह वर्तमान में एडोब लाइटरूम प्लगइन के डेवलपर्स के लिए संभव नहीं है, उदाहरण के लिए, क्योंकि लाइटरूम प्लगइन के सैंडबॉक्स के अंदर require का खुलासा नहीं करता है।

मुझे आश्चर्य है कि लुआ के साथ काम करते समय मुझे शायद ही कभी डीबगर की आवश्यकता महसूस हुई है। मैंने विभिन्न परियोजनाओं के लिए इसमें कई छोटे अनुप्रयोगों का निर्माण किया है और इस बात पर हैरान है कि पूर्ण स्टैक बैकट्रैस का संयोजन कितना अच्छा है और कभी-कभी print कॉल require "strict" की पहली जगह को रोकने वाली बग का पता लगाने के लिए काम करता है।

+0

रेमडिबगर लगभग वही है जो मैं ढूंढ रहा था। यह उपयोग करने योग्य होना चाहिए, और मुझे अनुकूलित करने के लिए एक अच्छा आधार दे। –

0

यदि आप विंडोज़ और वीएस का उपयोग कर रहे हैं - क्या आप उस चाल का उपयोग कर सकते हैं जिसका हम उपयोग करते हैं?

फ़ाइल में लूआ कोड कॉपी करें। फिर लुआ कोड में डीबगर एपीआई को कॉल करें (सी ++ में यह DebuggerBreak() है मुझे लगता है - here देखें)। तो जब lua कोड डीबगर निष्पादित करता है तो आग लग जाएगी और आप फ़ाइल निर्दिष्ट करने में सक्षम होना चाहिए। फिर सामान्य के रूप में डीबग करें?

+1

जो आधा समस्या हल करता है। मैं वास्तव में क्या करना चाहता हूं लाइन से लूआ कोड लाइन निष्पादित करना है। अगर आपके समाधान को समझने में, मैं लुआ लिपि में किसी भी लाइन को तोड़ने में सक्षम हूं, लेकिन मैं सी ++ डीबगर में रहूंगा। मैं स्थानीय लुआ चर और इस तरह का निरीक्षण कैसे करूं। –

+0

मैं इसे दो भागों में एक समस्या के रूप में देखता हूं - एक आसान निरीक्षण है जो कठिन होगा क्योंकि आप ऐसा करने के लिए डीबगर एक्सटेंशन लिख रहे होंगे। दूसरा तरीका यह निर्धारित करेगा कि लुआ 'इंजन' इन मूल्यों को कैसे स्टोर करता है और मैन्युअल रूप से या मैक्रो के माध्यम से उनका निरीक्षण करता है। –

2

मुझे नहीं पता कि डीबगर ब्रेक को कैसे कॉल करना चाहिए, क्योंकि यह .NET विशिष्ट है। मुझे लगता है कि सीएलआर को लक्षित करने वाले फोर्क वाले लुआ के साथ ही काम करता है।

यदि आप मानक लुआ का उपयोग कर रहे हैं तो आपके पास lua function call debug.debug() के माध्यम से कुछ रूढ़िवादी डिबगिंग सुविधाएं हैं। इससे लुआ को आपके कंसोल में फेंक दिया जाएगा, इसलिए यदि आप कंसोल से लुआ चला रहे हैं, तो आपको अपने वर्तमान स्थिति का निरीक्षण करने के लिए अंतराल को जारी करने में सक्षम होना चाहिए। debug.debug() आपको वर्तमान स्टैक फ्रेम में नहीं रखेगा, इसलिए आपको अपने चर के मानों को पढ़ने के लिए debug.getlocal() का उपयोग करना होगा।

मैंने अभी तक इसे आजमाया नहीं है, लेकिन मुझे नहीं लगता कि वास्तव में आपके स्वयं के व्यावहारिक डीबग कंसोल को इतना काम करना है। याद रखें कि लूआ सी ++ के रूप में जटिल भाषा नहीं है, इसलिए ऐसा करना वास्तविक सी ++ डीबगर बनाने की तरह बहुत आसान है जैसे gdb।

मुझे लगता है कि बहुत से लोग हैं जिन्होंने पहले से ही इसी तरह की चीजें की हैं, जिन्हें आप देख सकते हैं। Here केवल लुआ में लिखित सीएलआई डीबगर है। बस एक लुआ फ़ाइल। अपनी जरूरतों के लिए कड़ी मेहनत और संशोधित नहीं होना चाहिए।

6

कैसे Decoda ?? एक वीडियो है जो बताता है कि इसका उपयोग कैसे किया जाए, और यह एम्बेडेड लुआ स्रोत के लिए बहुत अच्छी तरह से काम करता है। (मैं एक खुश ग्राहक हूँ)। और यह बहुत सस्ता है।

+0

मैं डीकोड का उपयोग करता हूं और इसके साथ भी बहुत खुश हूं। यह आपकी परियोजना के साथ सहजता से जुड़ा हुआ है, और किसी भी सेटअप की आवश्यकता नहीं है। आप लूआ को डीकोड के साथ भी डीबग कर सकते हैं, और सी ++ एक ही समय में एक और डीबगर के साथ। मेरी एकमात्र शिकायत यह है कि डेवलपर्स (अज्ञात संसार) के पास उनके हाथों (प्राकृतिक चयन 2) पर बहुत अधिक प्राथमिकता प्रोजेक्ट है, इसलिए मेरे समर्थन अनुरोधों का अनुत्तरित नहीं हुआ है। (यह पता चला कि मेरा मुद्दा वैसे भी डीकोडा की गलती नहीं थी)। साथ ही, प्रोजेक्ट लिस्टिंग पेड़ दृश्य का समर्थन नहीं करती है, इसलिए एक बार जब आप बहुत सारी फाइलें प्राप्त कर लेते हैं, तो यह एक लंबी सूची में बदल सकता है। – Raptormeat

2

आप मेरे डीबगर का उपयोग कर सकते हैं: GRLD (ग्राफिकल रिमोट लुआ डीबगर)। RemDebug की तरह यह एक सॉकेट कनेक्शन का उपयोग करता है, लेकिन RemDebug के विपरीत यह एक अच्छा ग्राफिकल इंटरफ़ेस है। स्रोत कोड प्रदान किया जाता है, ताकि आप इसे किसी भी मंच पर काम कर सकें। यह मानक लुआ रनटाइम के साथ काम करता है। गैर वाणिज्यिक उपयोग के लिए नि: शुल्क।

संपादित करें: क्षमा करें, मुझे वेबसाइट बंद करना पड़ा, इसलिए सॉफ़्टवेयर अब डाउनलोड के लिए उपलब्ध नहीं है। अगर मुझे कभी समय लगता है तो मैं इसे ओपन सोर्स सॉफ्टवेयर के रूप में रिलीज़ कर सकता हूं।

संपादित करें 2: लिंक को अपडेट करने, अब MIT लाइसेंस (खुला स्रोत)

2

आप के रूप में आप मौजूदा से एक के साथ शुरू करने के लिए चाहते हो सकता है अपनी खुद की सांत्वना लिखने की जरूरत नहीं है के तहत GitHub में की मेजबानी की। RemDebug पहले से ही सुझाव दिया गया है; मैं MobDebug विकसित कर रहा हूं, जो रेमडेबग पर आधारित एक डीबगर है, लेकिन कई नई सुविधाओं और बग फिक्स के साथ। परिवर्तनों की विस्तृत सूची README में है।

आपकी स्क्रिप्ट में डिबगिंग सक्षम करना require('mobdebug').start() जोड़ना जितना आसान हो सकता है (यदि आप एक ही मशीन पर अपना ऐप और डीबगर सर्वर चला रहे हैं)। इसे स्थानीयहोस्ट पर डिफ़ॉल्ट पोर्ट पर डीबगर से सुनने की कोशिश करनी चाहिए। आप MobDebug में शामिल कमांड लाइन इंटरफ़ेस का उपयोग कर सकते हैं, या आप ZeroBrane Studio का उपयोग कर सकते हैं, जो एक लुआ आईडीई है जो डिबगिंग क्षमताओं को प्रदान करने के लिए MobDebug के साथ एकीकृत करता है। आईडीई लव 2 डी, मोई और अन्य लुआ इंजन के लिए डीबगिंग का समर्थन करता है और आपके सेट अप के लिए भी अच्छा काम कर सकता है।