2009-12-07 9 views
11

मैं मेमोरी पता मान को शामिल करने के लिए DebuggerDisplayAttribute लागू करना चाहता हूं। क्या हेक्साडेसिमल में इसे प्रदर्शित करने का कोई तरीका है?डीबगर डिस्प्ले के साथ दिखाए गए पाठ में स्ट्रिंग स्वरूपण का उपयोग किया जा सकता है?

[DebuggerDisplay("Foo: Address value is {Address}")] 
class Foo 
{ 
    System.IntPtr m_Address = new System.IntPtr(43981); // Sample value 


    System.IntPtr Address 
    { 
     get { return m_Address; } 
    } 
} 

हो जाएगा ताकि प्रदर्शन: Foo: Address value is 43981 इसके बजाय, मैं चाहता मूल्य उस तरह, हेक्स में प्रदर्शित करने के लिए: Foo: Address value is 0xABCD

मुझे पता है कि मैं ToString() ओवरराइड करके सभी प्रकार के स्वरूपण को लागू कर सकता हूं, लेकिन अगर मैं डीबगर डिस्प्ले एट्रिब्यूट्स के साथ भी संभव हो तो उत्सुक हूं।

अग्रिम धन्यवाद!

उत्तर

22

हां आप सामान्य रूप से गुणों से किसी भी विधि का उपयोग कर सकते हैं। [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] एक उदाहरण

http://msdn.microsoft.com/en-us/library/x810d419.aspx

+0

हालांकि यह संभव है, मैं इसके खिलाफ अनुशंसा करता हूं। यह हेक्साडेसिमल या दशमलव के रूप में संख्याओं को प्रदर्शित करने के लिए पसंद को दूर ले जाता है। यदि आप इसे टेक्स्ट संलग्न नहीं करते हैं, तो यह शुरुआत और अंत में उद्धरणों के साथ भी मुद्रित होता है, इसलिए अंततः यह डिबगर विंडो में '0xDEADBEEF "दिखाई देगा, जो पहले स्ट्रिंग की तरह एक पूर्णांक की तरह दिखता है। –

2

आप केवल हेक्स प्रारूप में मूल्यों को देखना चाहते हैं है, वहाँ उस प्रारूप में मूल्यों को प्रदर्शित करने दृश्य स्टूडियो में एक विकल्प है। डीबगिंग करते समय, डिबगिंग डिस्प्ले लाने के लिए अपने चर पर होवर करें, या अपनी घड़ी या स्थानीय विंडो में एक चर खोजें। चर पर राइट-क्लिक करें और "हेक्साडेसिमल डिस्प्ले" विकल्प का चयन करें। डीबगर तब हेक्साडेसिमल प्रारूप में सभी संख्यात्मक मान प्रदर्शित करेगा। इस मामले में, आपको यह मिलेगा: "Foo: पता मान 0x0000abcd है"

दुर्भाग्य से मैं पूछताछ के रूप में डीबगर डिस्प्ले विशेषता द्वारा प्रदर्शित स्ट्रिंग के प्रारूप को वास्तव में नियंत्रित करने का कोई तरीका नहीं देख सका।

7

एक टिप द्वारा https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/

मूल रूप से सिफारिश की है, एक निजी संपत्ति, कहते हैं, DebugDisplay पैदा करते हैं। संपत्ति अपनी पसंद की एक स्वरूपित स्ट्रिंग वापस करें। फिर DebuggerDisplay विशेषता में बस अपनी नई निजी संपत्ति का उपयोग करें।

उदा।

[DebuggerDisplay("{DebugDisplay,nq}")] 
public sealed class Student { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    private string DebugDisplay { 
     get { return string.Format("Student: {0} {1}", FirstName, LastName); } 
    } 
} 

मुझे यह और अधिक पठनीय होने का तरीका मिलता है।

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