2009-12-07 1 views
11

Desidero applicare DebuggerDisplayAttribute per includere un valore dell'indirizzo di memoria. C'è un modo per visualizzarlo in formato esadecimale?La formattazione della stringa può essere utilizzata nel testo mostrato con DebuggerDisplay?

[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; } 
    } 
} 

questo display: Foo: Address value is 43981 Invece, mi piacerebbe il valore da visualizzare in esadecimale, come quella: Foo: Address value is 0xABCD.

So che potrei applicare tutti i tipi di formattazione ignorando ToString(), ma sono curioso di sapere se lo stesso è possibile con DebuggerDisplayAttributes.

Grazie in anticipo!

risposta

22

Sì, è possibile utilizzare qualsiasi metodo dalle proprietà proprio come si farebbe normalmente. [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] è un esempio

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

+0

Mentre questo è possibile, consiglio di non farlo. Elimina la scelta di visualizzare numeri esadecimali o decimali. Se non si aggiunge il testo ad esso, è anche stampato con virgolette all'inizio e alla fine, quindi alla fine causerà "0xDEADBEEF" 'apparire nelle finestre del debugger, che a prima vista assomigliano a una stringa piuttosto che a un intero. –

2

Se si desidera solo visualizzare i valori in formato esadecimale, v'è un'opzione in Visual Studio per visualizzare i valori in quel formato. Durante il debug, passa con il mouse sopra la tua variabile per visualizzare il display di debug o trova una variabile nella finestra dell'orologio o dei locali. Fare clic con il tasto destro sulla variabile e selezionare l'opzione "Visualizzazione esadecimale". Il debugger mostrerà quindi tutti i valori numerici in formato esadecimale. In questo caso, si otterrà: "Pippo: valore di Indirizzo è 0x0000abcd"

purtroppo non ho potuto vedere alcun modo per controllare davvero il formato della stringa che viene visualizzata dall'attributo DebuggerDisplay come che stavi chiedendo.

7

C'è una punta consigliato da https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/

In sostanza, creare un proprietà privata, diciamo, DebugDisplay. Chiedi alla proprietà di restituire una stringa formattata a tua scelta. Quindi utilizza la tua nuova proprietà privata nell'attributo DebuggerDisplay.

Ad es.

[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); } 
    } 
} 

Trovo che questo modo sia molto più leggibile.