2017-05-19 46 views
5

मैं विजुअल स्टूडियो के लिए एक एक्सटेंशन विकसित करना चाहता हूं जो ब्रेकपॉइंट के हिट होने के बाद रनटाइम के दौरान कोड का एक छोटा स्निपेट चलाता है।स्निपेट चलाने के लिए मूल वीएस एक्सटेंशन और परिणाम प्रस्तुत करना (घड़ी के समान)

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

मैं इस सवाल को पोस्ट करने में अनिच्छुक था क्योंकि यह पहली नज़र में बहुत व्यापक लगता है, लेकिन मुझे काफी यकीन है कि इसे हासिल करने के कई अलग-अलग तरीके नहीं हैं।

मैंने मूल रूप से रोज़लिन में देखा था, लेकिन मुझे विश्वास है कि संकलन समय के लिए केवल तभी किया जाए जब मैं गलत नहीं हूं?

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

प्रश्न

कौन सा प्लेटफ़ॉर्म/तकनीक मुझे एक तरह से मैं रनटाइम के दौरान कोड 'तदर्थ' के अंश चलाने के लिए और अच्छी तरह से परिणाम प्रदर्शित कर सकते हैं में दृश्य स्टूडियो का विस्तार करने की अनुमति देता है?

+0

किस प्रकार की भाषा आप रनटाइम को संकलित करना चाहते हैं, क्या यह क्विकइन्फो टूलटिप्स के रूप में प्रस्तुत करता है। https://msdn.microsoft.com/en-us/library/ee197646.aspx –

+0

कुछ भी प्रस्तुत नहीं करता है, मैंने इसे अभी तक शुरू नहीं किया है। मैं सी # में लिख रहा हूँ। –

+0

मुझे नहीं लगता कि आपको इसके लिए एक एक्सटेंशन की आवश्यकता है। क्या आप मौजूदा ब्रेकपॉइंट सुविधाओं का उपयोग नहीं कर सकते हैं (ब्रेकपॉइंट पर राइट क्लिक करें -> क्रियाएं)? –

उत्तर

0

मैंने इसकी जांच का सुझाव देते हैं: क्रम में कोड के टुकड़े का मूल्यांकन करने के

0

प्रश्न: कौन से प्लेटफ़ॉर्म/तकनीक मुझे विस्तार करने के लिए अनुमति देता है विजुअल स्टूडियो एक तरह से मैं रनटाइम के दौरान कोड 'विज्ञापन' के स्निपेट चला सकता हूं और परिणामों को अच्छी तरह से प्रदर्शित कर सकता हूं?

मैं इस दृष्टिकोण देंगी:

  1. अपने नए खिड़की के साथ एक दृश्य स्टूडियो एक्सटेंशन बनाएं। इसमें विजुअल स्टूडियो एसडीके स्थापित करना शामिल है (इसे आजकल वीएस के साथ भेज दिया गया है) और फिर विंडो को सामान्य तरीके से बनाते हैं। उदाहरण के तौर पर, आप मेरी परियोजना https://github.com/atlaste/CPPCoverage -> CoverageExt की जांच कर सकते हैं जिसके लिए कुछ कोड है। https://github.com/Microsoft/VSSDK-Extensibility-Samples पर कई उदाहरण भी हैं।
  2. ऐसा करने के लिए, पहले एक अस्थायी फ़ोल्डर में एक छोटी सी # फ़ाइल बनाएं।

    // Add some convenient using's. 
    
    public class EvaluationClass { 
        public static object Evaluate() { 
        return /* paste the evaluated expression here */; 
        } 
    } 
    

    इस विधि के बारे में अच्छी बात यह है कि परिणाम स्वचालित रूप से बॉक्सिंग कर रहे हैं/object लिए casted है, जो ठीक है:

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

इसके बाद,

  1. उपयोग एक DLL संकलित करने के लिए Csc.exe। तदनुसार त्रुटियों को संभाल लें। सीएससी आपके में स्थित है।नेट फ्रेमवर्क फ़ोल्डर (c:\windows\microsoft.net\framework[x]\...)
  2. डीएलएल लोड करने और एक्सटेंशन में विधि को निष्पादित करने के लिए प्रतिबिंब का उपयोग करें।

बुनियादी चाल इस प्रकार है:

try { 
    var assembly = Assembly.Load(tempDllName); 
    // TODO: check if assembly is null --> compilation error 

    var eval = assembly.GetType("EvaluationClass").GetMethod("Evaluate"); 
    // TODO: check if eval is null --> compilation error 

    var result = eval.Invoke(); 

    // Draw result on window 
} 
catch (Exception ex) { 

    // Handle exception appropriately 
} 
  1. इस पर में सुधार ... यहाँ सबसे अधिक उपयोगी बात से शीर्ष स्टैक फ्रेम हड़पने के लिए किया जाएगा डीबगर और this ऑब्जेक्ट को value विधि के रूप में पास करें ... मैंने यह नहीं देखा है कि यह कैसे करें; यह कहीं भी एपीआई में उपलब्ध होना चाहिए ...
संबंधित मुद्दे