デバッグ時のウィンドウ

実行状況の確認

ウォッチ ウィンドウ (Watch Window)

表示形式の変更

ウォッチで変数を指定するときに「var,h」のようにカンマに続けて書式指定子を記述することで、ウォッチでの表示形式を変更できます。

言語によって、適用できる書式指定子が一部異なります。

C++
書式指定子 形式 表示例
d 10進整数 (decimal integer) 10
x または h 16進整数 (hexadecimal integer) 0x0000000a
   
wm Windows メッセージ番号 WM_CLOSE
   
C++ の書式指定子 | MSDN
ポインタ
記述例 出力内容
p,3 または p,[3] ポインタpの、先頭から3個の要素
p+1,3 ポインタpの、2個目から3個の要素
配列としてのポインターのサイズ指定子 - C++ の書式指定子 | MSDN

ポインタの要素に対して書式指定するときには、p,3xのように数の後に書式指定子を記述します。

オブジェクト 適用例
int a = 10;
int p[] = { 1, 2, 3 };
int* pp = p;
C++/CLI
書式指定子 形式 表示例
d または i 符号付き10進整数  
u 符号なし10進整数  
o    
   
C++/CLI での相互運用機能デバッグ用の書式指定子 - C++ の書式指定子

C++/CLIでも、C++同様にポインタを配列として表示できます。C++/CLI での相互運用機能デバッグでの配列としてのポインターのサイズ指定子 - C++ の書式指定子 | MSDN

ただしそのためには、デバッガのマネージ互換モードを有効にする必要があります。

C#
書式指定子 形式 表示例
d 10進整数  
h 16進整数  
ac    
nq    
hidden    
raw    
results    
C# の書式指定子 | MSDN

データヒント (DataTip)

変数にマウス ポインタを合わせることで、その変数の値などをツールチップのような表示で確認できる機能です。コード エディターでのデータ ヒントのデータ値の表示 | MSDN

データヒントで使用されるフォントは、オプションの[フォントおよび色]の[データヒント]の項目で変更できます。

トラブル対処法

値を確認できない

Unable to resolve identifier: '***"」と表示されるときには、***の名前が解決されるように名前空間などを指定します。

***.dll!0x*** (追加情報のためのシンボルの読み込み)」と表示されるときには、それを右クリックして[シンボルの読み込み]からシンボルを読み込みます。

式エバリュエーターでの内部エラーです。(The expression evaluator encountered an internal error.)」と表示されるときには、デバッグの設定で[従来の C# および VB の式エバリュエーターを使用する]を有効にします。c# - "Internal error in the expression evaluator" - Stack Overflow Expression Evaluator Error CXX0031 | Microsoft Docs

この式の値は適切でない可能性があります。次の理由により、評価できませんでした:」「'エラー: マネージ EE は式の構文を理解しません'」と表示されるときには、?

呼び出し履歴ウィンドウ (Call Stack Window)

ウィンドウ上で右クリックすることで、表示内容を変更できます。

表示されるのはアクティブなスレッドの履歴だけのため、他のスレッドの内容はスレッド ウィンドウから切り替えてから確認します。

スレッド ウィンドウ (Threads Window)

項目 意味
状態 矢印が表示されているのが、アクティブなスレッド
ID スレッドの識別番号

現在のスレッドのIDは、C++ならばGetCurrentThreadId()、C#ならばAppDomain.GetCurrentThreadId()で取得できる

マネージ ID
(Managed ID)
マネージ スレッドの識別番号

このマネージ IDは、Thread.ManagedThreadIdで取得できる

カテゴリ (分類)
(Category)
 
名前
(Name)
スレッド名
場所
(Location)
スレッドに関連付けられている関数名またはアドレス

場所がアドレスで表示されるときには、そのファイルのシンボルを読み込むことで関数名を確認できる

場所を展開することで、スレッドの呼び出し履歴を確認できる

優先度 (優先順位)
(Priority)
スレッドのスケジューリングの優先度
関係マスク
(Affinity Mask)
 
中断回数 (中断)
(Suspended Count)
スレッドの中断回数
プロセス名
(Process Name)
 

個々のスレッドはProcess Explorerで対象のプロセスのPropertiesを開くことで、そこの[Threads]タブでも確認できます。

名前
名前  
ntdll.dll!TppWorkerThread c++ - Why does Windows 10 start extra threads in my program? - Stack Overflow

出力ウィンドウ (Output Window)

出力される内容は、コンテキストメニューから変更できます。

  • 例外メッセージ
  • メッセージのフィルター処理のステップ実行
  • モジュールの読み込みメッセージ
  • モジュールのアンロード メッセージ
  • プロセス終了メッセージ
  • スレッド終了メッセージ
  • プログラム出力
[出力] ウィンドウ | MSDN

ビルド時に出力される内容は、MSBuildの出力設定から変更できます。

意図的な出力

ブレークポイントを設定することで、変数の値やメッセージを出力できます。またコード上から出力することもできます。

動作の確認

イミディエイト ウィンドウ (Immediate Window)

ウィンドウ内にコードを記述し、式の評価や変数の値の確認などを行えます。[イミディエイト ウィンドウ] | MSDN

コードの確認

混合モード ウィンドウ (Disassembly Window)

中断モード時に、エディタ上のコンテキストメニューから[逆アセンブルを表示]を選択することで、逆アセンブルしたコードを確認できます。[混合モード] ウィンドウ | MSDN

設定

例外設定 (Exception Settings)

指定の例外が発生したときに、デバッガの実行を中断させられます。これを指定しておくことで、例外の発生場所を簡単に特定できます。[例外設定] ウィンドウで例外を管理する - デバッガーでの例外を管理する - Visual Studio | Microsoft Docs

MSDN (Microsoft Developer Network) から検索