(※ 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 件のコメント:
コメントを投稿