(※ Visual Studio 2013 を対象としています。古いバージョンでは使えないものもあります。)
説明用サンプルコード
class B { int a, b, c; virtual void f() {} }; class D : public B { int x, y, z; }; int main() { D d; B* b = &d; ::std::vector<int> v{ 0, 1, 2 }; int a[1024]; for( int i=0; i < _countof(a); ++i ) a[i] = i; void* p = a; unsigned char* p8 = reinterpret_cast<unsigned char*>(a); char str[] = "Hello world."; void* pstr = str; DWORD dwWC = WS_CAPTION; DWORD dwMsg = WM_ACTIVATE; return 0; }
1. 配列表示
「var, 4」要素数を指定することで配列でない型でも配列表示できます。

2. 基数指定表示
基数 | |
---|---|
d | 10進数 |
u | 10進数(符号なし) |
o | 8進数 |
x, h | 16進数(小文字) |
X, H | 16進数(大文字) |
右クリックメニューで 16進表示の ON/OFF が変更できますが、これはすべてのウォッチ式に適応されます。
1つだけ 16進で見たい場合などには上記書式を使うと便利です。
また、あまり使う機会は少ないかと思いますが 8進表示もできます。

3. 文字列指定表示
文字 | |
---|---|
c | 単一文字 |
s(b) | ASCII文字列 |
su(b) | UNICODE文字列 |
s8(b) | UTF8文字列 |
bstr | BSTR文字列 |
変数を文字列として表示します。
文字列型ではないが文字列が格納されている場合などに使います。
b を付けた場合「"」で囲まれずに表示されます

4. HRESULT表示
「var, hr」とすることで値を HRESULT名(define名)+メッセージで表示できます。数値ではわかりにくいメッセージID もこれならすぐにわかります。

5. Windows メッセージ・クラスフラグ表示
「var, wm」とすることで HRESULT と同様に値を WM_*** のような define名で表示できます。「var, wc」とすると値をクラスフラグ名(define名)で表示できます。

6. アドレス・派生クラス非表示
「ptr, na」とするとアドレスが非表示になります。「ptr, nd」とすると派生クラスが非表示になります。

7. simple 表示
「var, view(simple)」Visual Studio 2013 から追加された機能で、view(xxxx) とすることで表示非表示の選択ができるようになっています。
::std::vector の場合、view(simple) とすることで size と capacity を非表示にできます。

8. 組み合わせ
ここまで紹介してきた書式は組み合わせて使うことができます。たとえば、アドレス・派生クラスの非表示で16進数表示する場合は、「var, nandx」と書きます。

9. カスタマイズ表示の無効化
「var, !」とするとカスタム表示ではなく、型そのままの表示がされます。
10. 擬似変数
ウォッチでは下記のような特殊な情報も表示できます。値 | |
---|---|
$handles | アプリケーションに割り当てられているハンドル数 |
$vframe | 現在のスタックフレームのアドレス |
$tid | 現在のスレッドID |
$env | 環境変数 |
$cmdline | コマンドライン引数 |
$pid | プロセスID |
$(registername) | レジスタの値 |
@(registername) | レジスタの値 |
$clk | クロック周期 |
$user | アプリケーションの実行ユーザー情報を表示 |
通常なら関数呼び出しで取得するような情報ですが、
擬似変数を使えばコードに仕込まなくても閲覧できるので非常に便利です。

また、これらは式の一部としても使えるので、
ESP レジスタが指す場所の値を見たいときは「*(int*)@esp」とすると見れます。

最後に
いかがでしたでしょうか?こちらで紹介した内容は MSDN にも載ってますのでそちらも参考にしてください。
また、今回はウォッチでの書式についてでしたが、Visual Studio ではカスタムビューという仕組みもあり、
それを利用することで vector のような見やすい表示にすることができます。
カスタムビューについてはこちらを参考にしてください。
ブログズミ: [Visual Studio] デバッガー変数表示のカスタマイズ
0 件のコメント:
コメントを投稿