(※ 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」要素数を指定することで配列でない型でも配列表示できます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf1ZdMA4LsbXFucOzuFQv_G1AnnC-0X2NqgTb0NQTxF3f2Yi_79zVgFuAx23Ek2KJmoKsBwhE71W18UaIKi-SQ5oHFYnWp3MZMdLwMOcaYlQR0pkxcs8MlW-3T4hwt22QgRog1Caf0KE8/s640/array.png)
2. 基数指定表示
基数 | |
---|---|
d | 10進数 |
u | 10進数(符号なし) |
o | 8進数 |
x, h | 16進数(小文字) |
X, H | 16進数(大文字) |
右クリックメニューで 16進表示の ON/OFF が変更できますが、これはすべてのウォッチ式に適応されます。
1つだけ 16進で見たい場合などには上記書式を使うと便利です。
また、あまり使う機会は少ないかと思いますが 8進表示もできます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaSoV_cEuMb7iUGoL2tkKggdJ69_vG-UCWsAspBkdBdD3ILUWYYN7WLPrqjzQrEXtp0JXySWpooZepQOn6CTcEbEI6C2Mu44unvqsE3Pmw7G1qSJKGTmgNEVuq5rwfT3P91CG5PJ5Pn68/s640/radix.png)
3. 文字列指定表示
文字 | |
---|---|
c | 単一文字 |
s(b) | ASCII文字列 |
su(b) | UNICODE文字列 |
s8(b) | UTF8文字列 |
bstr | BSTR文字列 |
変数を文字列として表示します。
文字列型ではないが文字列が格納されている場合などに使います。
b を付けた場合「"」で囲まれずに表示されます
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuvytIhenDc8908cH0qPHeYP_EDoprBn134RBeYYfhYvoTONEADPwz2rUNmR38tuvptfr-Mz4bLD89xfj_VybkZcGDKgVxfDafD83hqXOm22LKd-cQshf5P3ZpjTFl5XlXePFdxMCHFZs/s640/string.png)
4. HRESULT表示
「var, hr」とすることで値を HRESULT名(define名)+メッセージで表示できます。数値ではわかりにくいメッセージID もこれならすぐにわかります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8EYSjDL6PP-1nbcGyTrlcuPWhPQ58O0_EyeFAJBIv4O6_855v5AJKKi5RZVCtPUMD1c_EcHveVjHGcstdLdvma_pFwE5TIm7W1ANn3drUnKM3CsUqix6ehPELxQtrX3v6UH9MczAedMc/s640/hr.png)
5. Windows メッセージ・クラスフラグ表示
「var, wm」とすることで HRESULT と同様に値を WM_*** のような define名で表示できます。「var, wc」とすると値をクラスフラグ名(define名)で表示できます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF7rZlfMEXzCXmrbldzHhG9qGfr0WtUhHVtURRc0YgRUpXez92UAZVG3STSGUDUoNyIQA-78FMRbDMzGvzMCNyz5xhbsKmTCHHw6xkSap-eA1wrboNe7sznHqt037IekP7dw-E3NqsOaE/s640/wm.png)
6. アドレス・派生クラス非表示
「ptr, na」とするとアドレスが非表示になります。「ptr, nd」とすると派生クラスが非表示になります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWpGw5iexWk3V2gMge4D1wZeIP6vz8pKYVMnzuTJ3CoAquq18tPcn5FJiSG1iqwbZx-rxZb7j_Fm7BEHoAnD0HuHZ_P3xBtM692qo17NtM-XJl6k13fDQHZilzpQtNwq0eZKVnxfOkuYI/s640/nand.png)
7. simple 表示
「var, view(simple)」Visual Studio 2013 から追加された機能で、view(xxxx) とすることで表示非表示の選択ができるようになっています。
::std::vector の場合、view(simple) とすることで size と capacity を非表示にできます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRk7JdEra_Pn6pfW4ZQ5nQyi4X3erIM1Xj8MwJo6nDALwkWHP2mdYyP3y677JpDhcd7qOx4b_7AG_mtezS43FPQQGvlxDups_qsNy11TlNOtgo4qzThW4GgVZSCNKeePgEk1ko382OZk/s640/view.png)
8. 組み合わせ
ここまで紹介してきた書式は組み合わせて使うことができます。たとえば、アドレス・派生クラスの非表示で16進数表示する場合は、「var, nandx」と書きます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwlKuCrCESgFL6PkpK3RGbq2hQM5RDukw7qyp1HEcotFQQfah5C9M58xDF6Qq9nbB6YrSPc6XXygj1lBKslvW8tq-qc3KhNTGILiPj8bsYT0h4NCG0psO8KIFiYzYxJ-I1zshT64P-K90/s640/comb.png)
9. カスタマイズ表示の無効化
「var, !」とするとカスタム表示ではなく、型そのままの表示がされます。![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxsgR0PYwsevP9s2fAX2QxPjVeovNQ8iEzPfc7_JyY6wRi1XamgdzSLUtzY135E7lw3Sg301Mqjnz9hV8uDIu_lhnGAKzyWbrSEd-rmyWg-zFclE8G9jdMa0v5Mw-WYqSo86gRAcy-Hrk/s640/not.png)
10. 擬似変数
ウォッチでは下記のような特殊な情報も表示できます。値 | |
---|---|
$handles | アプリケーションに割り当てられているハンドル数 |
$vframe | 現在のスタックフレームのアドレス |
$tid | 現在のスレッドID |
$env | 環境変数 |
$cmdline | コマンドライン引数 |
$pid | プロセスID |
$(registername) | レジスタの値 |
@(registername) | レジスタの値 |
$clk | クロック周期 |
$user | アプリケーションの実行ユーザー情報を表示 |
通常なら関数呼び出しで取得するような情報ですが、
擬似変数を使えばコードに仕込まなくても閲覧できるので非常に便利です。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtPpNv2IFzA4Mbgje1hPjz1RRB2z3hXptsNHTzoKEKoGC5AVsICUKRaBkS6HW4Z9dmQY5ux03TwRSciLHlB6QN1pWV9S-06W3OzQCzBn6SNKZL6-XdjvQ39kRl6rYF1BJrzHmfD7p0DVA/s640/dummy.png)
また、これらは式の一部としても使えるので、
ESP レジスタが指す場所の値を見たいときは「*(int*)@esp」とすると見れます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfmqh9A_jGKkwUXTTSh5mblViSQr-YWJz_9w_qaP99mGYfmWVQKrrLL6Xy2NyLIJk_ggaD8Q2R3yBWNf3LBkpzmt8U72bqdTsTF48uUZsTGsUKissQvZFF8KzLKee_IMJEReUGgAVxxRw/s640/esp.png)
最後に
いかがでしたでしょうか?こちらで紹介した内容は MSDN にも載ってますのでそちらも参考にしてください。
また、今回はウォッチでの書式についてでしたが、Visual Studio ではカスタムビューという仕組みもあり、
それを利用することで vector のような見やすい表示にすることができます。
カスタムビューについてはこちらを参考にしてください。
ブログズミ: [Visual Studio] デバッガー変数表示のカスタマイズ
0 件のコメント:
コメントを投稿