वास्तविक समय डिबगिंग तकनीक


18

एक चर को ट्विक करने की दिनचर्या की तरह कुछ भी नहीं है, कोड को संकलित करने में कुछ मिनट लगते हैं, कोड को निष्पादित करते हुए, यह महसूस करते हुए कि आपका ट्वीक गलत दिशा में था और प्रक्रिया को फिर से दोहरा रहा है।

मैं अपने खेल तर्क के साथ बातचीत करना शुरू करना चाहूंगा जबकि एक सत्र चल रहा है। ऐसा करने के लिए आपके द्वारा नियंत्रित किए गए कुछ तरीके क्या हैं?

मैं iOS, C / C ++ और C # / XNA के समाधान सुनने के लिए खुला रहूंगा।

जवाबों:


12

बस इसे iOS डेवलपर्स के लिए खोजा गया है -

AsyncSocket
आप अपने एप्लिकेशन में एक सर्वर सेट करते हैं और इसे टर्मिनल के माध्यम से कनेक्ट करते हैं। फिर आप दूरस्थ कमांड पर पंप कर सकते हैं और वास्तविक समय में चर में हेरफेर करना शुरू कर सकते हैं। बहुत सुंदर।


4

पूरी तरह से व्याख्या की गई भाषा को एकीकृत करने से आप खेल तत्वों को बहुत आसानी से लिख सकते हैं, बहुत आसानी से उड़ने पर।

अजगर, लुआ, आदि सभी को इसके लिए स्पष्ट रूप से उपयोग किया जा सकता है। एंजेल इंजन शायद एक उदाहरण के रूप में काम कर सकता है।

हॉट लोडिंग एक अन्य तत्व है जिसे जांचने के लिए (मूल रूप से, एक घटना को यह कहते हुए निकाल दिया जाता है कि एक परिसंपत्ति बदल गई है - एक कॉन्फ़िग फ़ाइल, एक आर्ट एलिमेंट, आदि।) और आप इसे कंडीशनर की एक श्रृंखला के माध्यम से चलाते हैं जो इसे संशोधित करते हैं। नए के साथ मौजूदा को बदलने से पहले अंतिम प्रारूप।

मैंने एक तेज़ प्रोटोटाइप इंजन के साथ काम किया है जो गर्म लोडिंग का उपयोग करता है और यह एक खुशी थी।


2

जहाँ तक C ++, C #, और C # के साथ XNA का संबंध है, विज़ुअल स्टूडियो में उत्कृष्ट डिबगिंग टूल हैं - कोड में किसी भी बिंदु पर वास्तविक समय में एप्लिकेशन को रोकें, किसी भी समय चर को निर्दिष्ट मान देखें, फ़ंक्शन कॉल के माध्यम से कदम , कॉल स्टैक, और अधिक का विश्लेषण करें। इसके अलावा, पिक्स और सीएलआर प्रोइलर जैसे उपकरण डायरेक्टएक्स (पिक्स) और सीएलआर आधारित भाषाओं (सीएलआर प्रोफाइलर) के साथ विकास करते हैं।

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


1
जबकि वीएस एक उत्कृष्ट विकास उपकरण है, सामान्य डिबगिंग में समय लगता है - ब्रेकपॉइंट्स का शिकार करना, कोड के माध्यम से आगे बढ़ना, चर बदलना, प्रवाह को पुनरारंभ करना। यह सवाल एक इंटरफ़ेस घटक को स्थानांतरित करने, या बॉस के हमले के अनुपात
डेविड मैकग्रॉ

2

C / C ++ में एक आसान ट्रिक यह है कि अपने tweakable को स्टेटिक वैरिएबल में डालें, ब्रेकपॉइंट को ट्रिगर करें, डीबगर में स्टेटिक को बदलें और बाहर निकलने तक यह लगातार बना रहे।


हालांकि यह एक फ़ंक्शन के अंदर एक स्थिर चर बनाता है। यदि यह एक वैश्विक स्टैटिक विज़ुअल स्टूडियो है, तो इसका मूल्य दिखाने में सक्षम नहीं हो सकता है।
काज

2

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

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

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

मुझे डेविड के जवाब में उल्लिखित ASYNC सॉकेट भी पसंद हैं

उपयोग करने में आसान आपकी खेल टीम को इन उपकरणों में जोड़ने और उन्हें बहुत आसानी से उपयोग करने में सक्षम होना चाहिए, या वे बस उपयोग नहीं करेंगे।


2

मुझे पता है कि सीन जेम्स ने पहले ही कहा था । लेकिन गंभीरता से, विजुअल स्टूडियो (विशेष रूप से डिबगिंग टूल) इसके लिए बहुत बढ़िया है।

मैं इन दिनों C ++ का उपयोग नहीं करता हूं, इसलिए मुझे इस बारे में निश्चित नहीं है कि ये वहां कितनी अच्छी तरह लागू होते हैं। लेकिन C # (C # एक्सप्रेस में शामिल) के लिए:

और यह आपके दिमाग को उड़ा सकता है (जब मुझे इसके बारे में पता चला तो यह मेरा खून बह गया):

तत्काल विंडो वास्तव में खोजने के लिए कठिन है (यह डिबग / विंडोज मेनू में है)।

विजुअल C # डीबगर का उपयोग करने का एकमात्र प्रमुख पहलू यह है कि यह बदलते constमूल्यों को पसंद नहीं करता है । इसलिए मैं आम तौर पर सिर्फ अपने गेमप्ले से संबंधित मूल्य बनाता हूं, staticजबकि मैं उन्हें ट्विक कर रहा हूं।

(इसके अलावा, दो मॉनिटर होने से बहुत मदद मिलती है।)


अब मुझे यह स्वीकार करना चाहिए कि उपरोक्त पद्धति में आपके आवेदन को रोकना शामिल है - जो कुछ विशेष रूप से काल्पनिक चीजों के लिए असंतोषजनक रूप से धीमा हो सकता है।

इन दुर्लभ अवसरों पर, मैं क्या करता हूं (XNA में) बस थोड़े से कोड में हैक करना है (शायद एडिट एंड कंटिन्यू, ऊपर बताए अनुसार) हथियाने के लिए Keyboard.GetState().IsKeyDown()(वास्तव में मेरे पास इसके लिए एक आसान-प्रकार का आवरण है) और समायोजित करें कीस्ट्रोक्स द्वारा मूल्य। अधिक जटिल कुछ भी प्रयास के लायक नहीं है।


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

(और, एक बार फिर, यह रनटाइम में इन विज़ुअलाइज़ेशन को "संपादित और जारी रखना" करने में सक्षम होना अच्छा है।)


(स्रोत: andrewrussell.net )
( यहाँ से )

मुझे डर है कि मेरे पास इस समय (शायद बाद में) प्रकाशित करने के लिए "अच्छा" स्रोत नहीं है। लेकिन यह मूल रूप से लाइनों की एक सूची है ( इस गोल रेखा पुस्तकालय के लिए ) और तार (XNA के अंतर्निहित स्प्राइटबैच के लिए)। बस इसे public staticकहीं बना दें , और सब कुछ एक उपयुक्त परिवर्तन के साथ आकर्षित करें ताकि सब कुछ "विश्व अंतरिक्ष" में दिखाई दे (और फिर अगले फ्रेम के लिए सूचियों को साफ़ करें)।


1

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

जोड़ने के लिए संपादित: यह धागा अब थ्रेडिंग के बारे में है, थ्रेड-शीर्षक के अनुसार डिबगिंग नहीं।


0

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

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


0

चर के लोडिंग और रीडिंग को एक टेक्स्टफाइल में बांधें और कंसोल से एक विशिष्ट कीबाइंडिंग या कमांड का उपयोग करके इसे फायर करें।

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