2009-12-07 10 views
11

メモリアドレス値を含めるためにDebuggerDisplayAttributeを適用します。 16進数で表示する方法はありますか?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; } 
    } 
} 

この意志表示:Foo: Address value is 43981 代わりに、私はそのように、進で表示する値をたいと思います:Foo: Address value is 0xABCD

ToString()をオーバーライドすることであらゆる種類の書式設定を適用できることは知っていますが、DebuggerDisplayAttributesで同じことが可能であるかどうか不思議です。

ありがとうございます!

答えて

22

はい、通常と同じようにプロパティから任意の方法を使用できます。 [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")]は、あなただけの16進形式の値を表示したい場合は、その形式で値を表示するには、Visual Studioのオプションがある例

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

+0

これが可能ですが、私はそれに反対してください。数字を16進数または10進数で表示するかどうかを選択できます。テキストを追加しない場合は、開始時と終了時にも引用符で表示されるので、最終的にデバッガウィンドウに '" 0xDEADBEEF "'が表示されます。 –

2

です。デバッグ中は、変数にカーソルを置いてデバッグ画面を表示するか、ウォッチウィンドウやローカルウィンドウで変数を見つけます。変数を右クリックし、 "16進表示"オプションを選択します。デバッガはすべての数値を16進形式で表示します。 "Foo:Address value is 0x0000abcd"

残念ながら、私が尋ねていたとおりにDebuggerDisplay属性で表示される文字列のフォーマットを実際に制御する方法が見つかりませんでした。

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

私はこの方法がはるかに読みやすくなることがわかりました。

関連する問題