2011-12-20 6 views
13

मैंने हाल ही में नोटच लुडम डियर लाइव स्ट्रीम का थोड़ा सा देखा। वह अपने खेल पर काम करते हुए एक्लिप्स की हॉटस्पैप सुविधा का व्यापक रूप से उपयोग करता है। (यहां एक वीडियो है जिसका मैं http://www.twitch.tv/notch/b/302823358?t=86m30s का जिक्र कर रहा हूं)क्या विजुअल स्टूडियो 2010 में निष्पादन को रोक दिए बिना संपादित करना और जारी रखना संभव है?

मैं सी # और एक्सएनए के साथ ऐसा करना चाहता हूं। सौभाग्य से, विजुअल स्टूडियो में एक संपादन और जारी सुविधा है। हालांकि, मैं इसे रुकने के बजाए चल रहा है, जबकि मैं अपने प्रतिपादन कोड को संपादित करना चाहता हूं।

क्या मेरे लिए विजुअल स्टूडियो को ऐसा करने के लिए सेटअप करना संभव है? मैंने देखा कि Break all processes when one process breaks के लिए एक चेकबॉक्स है। क्या मेरे प्रतिपादन लूप को किसी अन्य थ्रेड में सेट करना संभव हो सकता है ताकि जब मैं कोई परिवर्तन करता हूं तो गेम प्रतिपादन करता रहता है?

+0

क्या मैं उन मानों को पढ़ने का सुझाव देता हूं जिन्हें आप फ़ाइल से संपादित करना चाहते हैं, ताकि आप फ़ाइल को संपादित कर सकें और जब भी आप दौड़ते समय इसे फिर से पढ़ सकें? – Benjamin

+0

हां यह अच्छा अभ्यास है, लेकिन अंतःक्रियात्मक कार्यक्रम में सक्षम होना भी अच्छा है। यह आमतौर पर एक स्क्रिप्टिंग भाषा के उपयोग के माध्यम से किया जाता है। मैं उम्मीद कर रहा था कि सी # इस उदाहरण में जावा क्या कर सकता है। दुर्भाग्यवश, ऐसा लगता है कि किसी ने स्रोत फ़ाइलों को लॉक करने के लिए डिज़ाइन निर्णय लिया है, केवल निष्पादन के दौरान पढ़ने के लिए कि यह संपादन के लिए उपयोगी कैसे हो सकता है। – zfedoran

उत्तर

16

अद्यतन: यह उत्तर अब उपलब्ध है as a video


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

तरह से इस कार्यप्रवाह प्राप्त करने के लिए, वास्तव में आश्चर्यजनक सरल है एक बार आप इसे के बारे में सोच:

उपयोग शॉर्टकट कुंजी!

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

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

मुझे कुछ तेज़ी चाहिए।

फिर, कीबोर्ड का उपयोग कर: तो मैं एक बेहतर समाधान के साथ आया था प्रेस Ctrl +Alt + तोड़ "सभी तोड़" के लिए। यह लगभग तुरंत डीबगर में प्रवेश करता है, ब्रेकपॉइंट सेट करने के बारे में चिंता किए बिना या यदि आप जिस कोड को संशोधित करना चाहते हैं वह लूप में चल रहा है। यह संपादक विंडो और कैरेट फ़ोकस को उस दस्तावेज़ पर बदल देगा जहां निष्पादन ब्रेक होता है, लेकिन फिर आप Ctrl + - दबाकर तुरंत "नेविगेट करें" के लिए इसे ठीक कर सकते हैं।

फिर आप अपने संपादन कर सकते हैं और कार्रवाई में उन्हें देखने के लिए F5 दबा सकते हैं।शुरुआती रूप से चुनने के लिए आपको केवल एक बार माउस का उपयोग करना होगा (या बिल्कुल नहीं) जहां आप टाइप करना शुरू करना चाहते हैं - जैसा कि आप उम्मीद करेंगे।

वैसे Ctrl +Alt + तोड़ और Ctrl +- कुछ आप बहुत जल्दी ऐसा करने में सक्षम होना चाहता हूँ के लिए भयानक कुंजी संयोजन कर रहे हैं। और यह बेहतर होगा अगर प्रेस करने के लिए केवल एक कुंजी थी।

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

व्यक्तिगत रूप से मैंने अपने माउस पर अतिरिक्त बटन पर मैक्रो सेट द्वारा उत्तराधिकार में दबाए जाने के लिए दो महत्वपूर्ण संयोजन स्थापित किए हैं (आपको दोनों के बीच देरी की आवश्यकता नहीं है)। जो उचित रूप से अच्छी तरह से काम करता है - क्योंकि मैं आमतौर पर एक ही समय में पाठ का चयन कर रहा हूं। मैं बाद में एक कीबोर्ड मैक्रो भी जोड़ सकता हूं।

  • तो आप एप्लिकेशन चलाते हैं, दृश्य स्टूडियो यह ध्यान केंद्रित देता है:

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

  • "पिछड़ा नेविगेट करें" पाठ चयन को बनाए रखने में नहीं, केवल देखभाल स्थिति को बनाए रखता है।
+2

मुझे आशा है कि यह वर्कफ़्लो विजुअल स्टूडियो के भविष्य के संस्करणों में आसान हो जाएगा। तत्काल प्रतिक्रिया और हॉट-स्वैपिंग सुविधाओं में रुचि बढ़ रही है। यह बात दिखाती है कि एक दिन क्या संभव हो सकता है: http://vimeo.com/36579366 – zfedoran

+0

बस इस पर आया। इस अद्भुत जवाब के लिए धन्यवाद, एंड्रयू! –

7

मैं आपको बता सकते हैं कि कैसे है, लेकिन आप इसे पसंद करने के लिए जा arn't:

1) एक दृश्य स्टूडियो उदाहरण में अपने खेल निष्पादन योग्य चलाने (Game.exe -> vsInstanceA)

2) कोड एक अलग dll में अपने परिवर्तनीय कोड, एक अलग दृश्य स्टूडियो उदाहरण का उपयोग करते हुए (modifiable.dll -> vsInstanceB)

* ध्यान दें कि कर यह आप अपने modifiable.dll संकलन है, इस प्रकार, आदि संकलन समय त्रुटि जाँच कर रही *

की सुविधा देता है ... और अब वह जगह है जहाँ इसे पाने के मुश्किल ...

3a)game.exe को modifiable.dll संदर्भित करने की आवश्यकता है। नहीं .vcproj, वास्तविक dll

3 बी) जब आप एक "जादू कुंजी" मारा (एक चाबी प्रेस के लिए Game.exe नजर है), है Game.exe उतारना modifiable.dll, और इसे पुनः लोड करें। आप आसानी से mscorlib में प्रदान की गई असेंबली और ऐपडोमेन कक्षाओं के माध्यम से ऐसा कर सकते हैं। बेशक इसका मतलब है कि आपको game.exe में किसी भी निर्भर सिस्टम को अनलोड करना होगा।

टिप्पणी, वहाँ हाथ लहराते इस 3 बी) खंड में का एक बहुत (उदाहरण Google खोज, यह काफी काम का एक बहुत कुछ है, लेकिन बहुत सीधे आगे है: https://www.google.com/search?q=dynamic+load+dll+.net)

... और उसके बाद, आप अच्छे हैं जाने के लिए ...

3-alt) कुछ अन्य विकल्पों अगर 3 बी) आप को सूट नहीं करता है:

  • आप MSBuild.exe आह्वान कर सकते हैं के पुनर्निर्माण के लिए modifiable.dll जब आप 012 दबाएँ"जादू कुंजी"
  • आप सीएसएचआरपी कंपाइलर डीएल का गतिशील रूप से पूरे संशोधित के बजाय प्रत्येक वर्ग को पुन: संकलित कर सकते हैं।

dll लेकिन दुर्भाग्य से, .net विकास के अपने 10 वर्ष से अधिक में, इस एक ही रास्ता है, जब तक कि कोई यह करने के लिए एक 3 पार्टी उत्पाद पैदा कर दी है (आईई: वे मैं क्या उल्लेख करते हैं, आप के लिए)

+0

"समाधान" के साथ आने के लिए समय निकालने के लिए धन्यवाद :) – zfedoran

2

यह वही नहीं हो सकता है जो आप खोज रहे हैं लेकिन यह वही है जो मैं कर रहा हूं। जब आपका गेम चल रहा है तो बस ब्रेक पॉइंट में फेंक दें। एक बार यह बंद हो जाने के बाद, आप चीजों को संपादित कर सकते हैं, ब्रेक पॉइंट को हटा सकते हैं, और फिर जारी रखने के लिए F5 दबा सकते हैं।

अधिकांश भाग के लिए, यह गेम चलाने के दौरान चीजों को संपादित करने और बाद में गेम चलाने के लिए अनुमति देता है लेकिन यह सबकुछ के लिए काम नहीं करता है। आप कक्षा स्तर की चीज़ों को जोड़ या हटा नहीं सकते हैं और पूरे कार्यों या पैरामीटर को भी जोड़/हटा नहीं सकते हैं। अधिकतर, मैं यह छोटी चीजों के लिए अलग-अलग संख्याओं और समीकरणों का परीक्षण करने के लिए करता हूं जो प्रत्येक अद्यतन को हिट करते हैं।

0

मूल प्रश्न का उत्तर देने के लिए "विजुअल स्टूडियो 2010 में निष्पादन रोक दिए बिना?"

नहीं जावा के लिए जेआरबेल है जो इसकी अनुमति देता है।

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

मैं यह करना चाहता हूं कि ऐसा करने का कोई आसान तरीका है - मैं जोखिम उठाऊंगा, और बहुत से अस्वीकरण कर दूंगा कि यदि आप बाहरी सिस्टम से बात करने वाले हॉटस्पैप सेवाओं को चाहते हैं तो आपको उस जटिल ढांचे का उपयोग करने की आवश्यकता है जो कुछ भी।

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

0

मैं इंटेलिजे आइडिया + डीसीईवीएम (गतिशील कोड विकास वीएम) का उपयोग कर जावा में काम करने के लिए उपयोग किया जाता हूं।

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

हालांकि यदि आप कर सकते हैं, तो नवीनतम .NET कोर का उपयोग करने का प्रयास करें जो डॉटनेट वॉच का उपयोग करके बेहतर उत्पादकता प्रदान करता है। अभी भी डीसीईवीएम जितना तेज़ नहीं है लेकिन परंपरागत वीएस + .NET हॉट रीलोड अनुभव से काफी बेहतर है। Details here

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