.NET TIPS

デバッグ時にプロパティ値やフィールド値を簡単に確認できるようにするには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2010/03/25

 Visual Studioでアプリケーションをデバッグする場合、コードにブレークポイントを設定して実行を中断し、中断個所でオブジェクトの内容(プロパティ値やフィールド値)を確認するといった作業を行うのが一般的だ。

 この際、あらかじめクラスの定義にDebuggerDisplay属性(System.Diagnostics名前空間)を付与しておけば、指定した形式で、オブジェクトの内容を簡単に表示させることができる。

 次の2つの画面(図1、図2)は、実行の中断中に、デバッグ対象のインスタンス(Personクラスのオブジェクト)上にマウス・カーソルを移動して、インスタンスの情報を表示させたときの画面だ。図2では、PersonクラスにDebuggerDisplay属性を付与しているため、マウスのそばに表示されているポップアップ・ウィンドウの内容が異なっている(以下、すべてVisual Studio 2008の画面)。


図1 マウス・ホバーによるデバッグ時のインスタンス情報の表示
マウス・カーソルを変数上に移動すれば、ポップアップ・ウィンドウが現れる。通常は先頭にある「+」部分をクリックして展開し、そのインスタンスのプロパティ値やフィールド値を確認できる。


図2 DebuggerDisplay属性を使用した場合のインスタンス情報の表示
あらかじめPersonクラスにDebuggerDisplay属性を付与しておくと、そのインスタンスについて確認したい情報をポップアップ・ウィンドウに表示できる。

 図2の画面で実行しているサンプル・コードを次に示しておく。上の画面はC#でコンソール・アプリケーションを作成したときのものだが、以下ではVBのコードも示している。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
  [System.Diagnostics.DebuggerDisplay("氏名:{Name}、年齢:{Age}")]
  public class Person
  {
    public string Name;
    public int Age;
  }

  class Program
  {
    static void Main(string[] args)
    {
      Person myPerson = new Person();
      myPerson .Name = "山田太郎";
      myPerson .Age = 51;

      Console.WriteLine(myPerson);
    }
  }
}
<System.Diagnostics.DebuggerDisplay("氏名:{Name}、年齢:{Age}")> _
Public Class Person
  Public Name As String
  Public Age As Integer
End Class

Module Module1

  Sub Main()
    Dim myPerson As New Person()
    myPerson.Name = "山田太郎"
    myPerson.Age = 51

    Console.WriteLine(myPerson)
  End Sub

End Module
DebuggerDisplay属性を使用したサンプル・コード(上:C#、下:VB)

 Personクラスに付与しているDebuggerDisplay属性の記述は次のようなコードである。

[DebuggerDisplay("氏名:{Name}、年齢:{Age}")]
<DebuggerDisplay("氏名:{Name}、年齢:{Age}")>
DebuggerDisplay属性の記述例(上:C#、下:VB)

 DebuggerDisplay属性では、デバッグ情報として表示される文字列を1つ、引数として指定する。文字列には、{Name} や {Age} のように、プロパティやフィールド、メソッドの名前を中カッコで囲んで埋め込むことができ、デバッグ時には、それらはインスタンスでの値に置き換えられる。

 また、文字列のプロパティやフィールドについては、次のように中カッコ内の名前の後ろに「,nq」を付けることにより、ダブルクォートを非表示にできる。

[DebuggerDisplay("氏名:{Name,nq}、年齢:{Age}")]
<DebuggerDisplay("氏名:{Name,nq}、年齢:{Age}")>
ダブルクォートを表示しないDebuggerDisplay属性の記述例(上:C#、下:VB)

 「,nq」を指定した場合の表示を次に示す。


図3 ダブルクォートを非表示にしたインスタンスの情報表示

 図2では「氏名:"山田太郎"」となっていた表示が、この図3では「氏名:山田太郎」となっているのが分かる。

 なおDebuggerDisplay属性は、クラス以外にも、プロパティやフィールド、アセンブリなどにも適用可能だ。詳しくはDebuggerDisplayAttributeクラスの解説を参照していただきたい。End of Article

カテゴリ:Visual Studio 2005 処理対象:IDE
カテゴリ:Visual Studio 2008 処理対象:IDE
使用ライブラリ:DebuggerDisplay属性(System.Diagnostics名前空間)

この記事と関連性の高い別の.NET TIPS
コメントに記述された変数の内容を確認するには?
[ASP.NET]GridViewコントロールで各列の表示をカスタマイズするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間