2012-08-28 11 views
6

टी एल के लिए; डॉ
किसी को विजुअल स्टूडियो 2012, सी # में के लिए एक डीबग विजुअलाइज़र लिखने के लिए कैसे पता है, तो मैं IEnumerable<string>, string[] या इसी तरह की वस्तुओं कल्पना कर सकते हैं?दृश्य स्टूडियो विजुअलाइज़र IEnumerable <string>

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

public class DebuggerSide : DialogDebuggerVisualizer 
{ 
    protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) 
    { 
     if (windowService == null) 
      throw new ArgumentNullException("windowService"); 
     if (objectProvider == null) 
      throw new ArgumentNullException("objectProvider"); 


     var data = (string)objectProvider.GetObject(); 

     using (var displayForm = new VisualizerForm(data)) 
     { 
      windowService.ShowDialog(displayForm); 
     } 
    } 

    /// <summary> 
    /// Tests the visualizer by hosting it outside of the debugger. 
    /// </summary> 
    /// <param name="objectToVisualize">The object to display in the visualizer.</param> 
    public static void TestShowVisualizer(object objectToVisualize) 
    { 
     VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide)); 
     visualizerHost.ShowVisualizer(); 
    } 
} 

VisualizerForm अतिरिक्त नियंत्रण आदि के साथ कस्टम रूप है ... :

[assembly: System.Diagnostics.DebuggerVisualizer(typeof(My.Namespace.DebuggerSide), 
              typeof(VisualizerObjectSource), 
              Target = typeof(string), 
              Description = "Awesome Visualizer")] 

DebuggerSide का कोड मूल रूप से टेम्पलेट से उदाहरण है जब मैं प्रोजेक्ट का निर्माण करता हूं और My Documents/Visual Studio 11/Visualizers फ़ोल्डर में डीएल डालता हूं, और विजुअल स्टूडियो को पुनरारंभ करता हूं, तो मैं स्ट्रिंग ऑब्जेक्ट के लिए ब्रेकपॉइंट हिट होने पर वास्तव में दिखने वाले ग्लास आइकन के नीचे दिखाई देने वाला डीबगर देख सकता हूं। वू हू! अब तक सब ठीक है।

अब मैं string को देखने के बजाय, string[] या IEnumerable<string> या एक समान वस्तु को देखने के बजाय, चाहूंगा। हालांकि जब मैं IEnumerable<string> पर असेंबली विशेषता बदलता हूं, यह काम नहीं कर रहा है, तो आईनेमरेबल ऑब्जेक्ट्स पर प्रदर्शित एक ग्लास आइकन भी नहीं है।

अद्यतन
मैं इसे List<> को TargetType बदल रहा है और उसके बाद अगर मैं List<string> पर कास्ट कर सकते जाँच करके काम करने के लिए मिल सकता है। बहरहाल, यह मैं अपने सभी वस्तुओं को मैं List को डिबग करने के लिए चाहते हैं कास्ट करने के लिए है और IEnumerable<> उपयोग नहीं कर सकते या स्ट्रिंग []

+0

मोल के लिए +1। मैं संग्रह के लिए एक विज़ुअलाइज़र लिखने की कोशिश कर रहा था और मुझे लगता है कि यह पहले से ही है। अब तिल कोशिश करने जा रहे हैं। ** अद्यतन: ** तिल अब बेचा नहीं जा रहा है। एक विजुअलाइज़र लिखने के लिए वापस। –

+0

इसे एक शॉट दें, सभी ऑब्जेक्ट्स के लिए काम करता है: https://github.com/amithegde/LpDump – Amit

उत्तर

1

Visualizers प्रलेखित के रूप में सामान्य प्रकार के लिए

समर्थन सीमित है का मतलब है। आप एक लक्ष्य के लिए एक विज़ुअलाइज़र लिख सकते हैं जो सामान्य प्रकार है यदि सामान्य प्रकार एक खुला प्रकार है।

जिसका अर्थ है कि आप एक विज़ुअलाइज़र नहीं लिख सकते हैं जो IEnumerable<string> जैसे बंद किए गए प्रकार का उपयोग करता है। क्या आपने लक्ष्य प्रकार को IEnumeraable<> पर सेट करने का प्रयास किया है, फिर यह देखने के लिए जांच कर रहे हैं कि तत्व string प्रकार हैं या नहीं?

+0

धन्यवाद, मैं वास्तव में एक ऐसे दृष्टिकोण का उपयोग कर रहा हूं जहां मैं ऑब्जेक्ट की सामग्री की जांच करता हूं। – RoelF

1

'वस्तुओं डिबगर visualizers हो सकता है' यहाँ अनुभाग देखें: https://rapiddevbookcode.codeplex.com/wikipage?title=EnumerableDebugVisualizer

मेरे Enumerable डीबगर विजुअलाइज़र एक IEnumerable के साथ काम करेंगे अगर अंतर्निहित ठोस इसके साथ पंजीकृत प्रकार, आप पंजीकरण कोड को देखो पाने के लिए कर सकता है आपका काम

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