Share via


Visual Studio デバッガーでの書式指定子 (C++)

書式指定子を使用して、[ウォッチ][自動変数][ローカル] の各ウィンドウに表示される値の書式を変更することができます。

また、[イミディエイト] ウィンドウ、[コマンド] ウィンドウ、トレースポイント、ソースのウィンドウでも、書式指定子を使用できます。 これらのウィンドウで式の上にカーソルを合わせると、結果が [データヒント] に表示されます。 [データヒント] の表示には、書式指定子が反映されます。

Note

Visual Studio のネイティブ デバッガーが新しいデバッグ エンジンに変更されたときに、新しい書式指定子がいくつか追加され、古いものがいくつか削除されました。 C++/CLI で相互運用 (ネイティブ コードとマネージド コードの混合) をデバッグする場合は、以前のデバッガーが引き続き使用されます。

書式指定子の設定

次のコード例を使用します。

int main() {
    int my_var1 = 0x0065;
    int my_var2 = 0x0066;
    int my_var3 = 0x0067;
}

デバッグ中に my_var1 変数をウォッチ ウィンドウに追加します ([デバッグ]>[Windows]>[ウォッチ]>[ウォッチ 1])。 次に、変数を右クリックし、[16 進数で表示] を選択します。 これで、ウォッチ ウィンドウに値 0x0065 が示されます。 この値を整数ではなく文字として表示するには、最初に右クリックして [16 進数で表示] を選択解除します。 次に、文字書式指定子 , c を、[Name] 列の変数名の後に追加します。 [Value] 列に 101 'e' が表示されるようになります。

Screenshot of the Visual Studio Watch window with one selected line that shows my_var1.c with a value of 101 'e' and a type of int.

ウォッチ ウィンドウの値にコンマ (,) を追加することで、使用できる書式指定子の一覧を表示して選択できます。

WatchFormatSpecDropdown

書式指定子

次の表で、Visual Studio で使用できる書式指定子を説明します。 太字で示されている指定子は、新しいデバッガーでのみサポートされており、C++/CLI を使用した相互運用機能デバッグではサポートされていません。

指定子 形式 元の [ウォッチ] の値 表示される値
d 10 進整数 0x00000066 102
o 符号なし 8 進整数。 0x00000066 000000000146
x

h
16 進整数 102 0xcccccccc
X

H
16 進整数 102 0xcccccccc
xb

hb
16 進数の整数 (先頭 0x なし) 102 cccccccc
Xb

Hb
16 進数の整数 (先頭 0x なし) 102 CCCCCCCC
b 符号なし 2 進整数 25 0b00000000000000000000000000011001
bb 符号なし 2 進整数 (先頭 0b なし) 25 00000000000000000000000000011001
e 指数表記 25000000 2.500000e+07
g 指数表記と浮動小数点のうちの短い方 25000000 2.5e+07
c 1 文字 0x0065 101 'e'
s const char* 文字列 (引用符あり) <場所> "hello world" "hello world"
sb const char* 文字列 (引用符なし) <場所> "hello world" Hello World
s8 UTF-8 文字列 <場所> "This is a UTF-8 coffee cup ☕" "This is a UTF-8 coffee cup ☕"
s8b UTF-8 文字列 (引用符なし) <場所> "hello world" Hello World
su Unicode (UTF-16 エンコード) 文字列 (引用符あり) <場所> L"hello world" L"hello world"

u"hello world"
sub Unicode (UTF-16 エンコード) 文字列 (引用符なし) <場所> L"hello world" Hello World
bstr BSTR バイナリ文字列 (引用符あり) <場所> L"hello world" L"hello world"
env 環境ブロック (2 つの null で終了する文字列) <場所> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 UTF-32 文字列 (引用符あり) <場所> U"hello world" u"hello world"
s32b UTF-32 文字列 (引用符なし) <場所> U"hello world" Hello World
en enum Saturday(6) 土曜日
hv ポインター型。検査されるポインター値が配列のヒープ割り当ての結果であることを意味します (たとえば、 new int[3])。 <位置>{<最初のメンバー>} <位置>{<最初のメンバー>, <2 番目のメンバー>, ...}
na オブジェクトのポインターのメモリ アドレスを非表示にします。 <位置>, {member=value...} {member=value...}
nd 基底クラスの情報だけを表示し、派生クラスは無視します。 (Shape*) square には基底クラスおよび派生クラスの情報が含まれます。 基底クラスの情報だけを表示します。
時間 HRESULT または Win32 エラー コード。 この指定子は、デバッガーによって自動的にデコードされるため、HRESULT では不要になりました。 S_OK S_OK
wc Windows クラス フラグ 0x0010 WC_DEFAULTCHAR
wm Windows メッセージ番号 16 WM_CLOSE
nr "未加工ビュー" 項目の抑制
nvo 数値に対してのみ "未加工ビュー" 項目を表示する
! データ型の表示カスタマイズをすべて無視した、未処理の書式。 <カスタマイズされた表現> 4
ハンドル win32 ハンドルに関する情報を表示します 0x000000000000009c スレッド ID など、ハンドルに関する有用な情報を表示します。

Note

hv 書式指定子が存在する場合、デバッガーはバッファーの長さを判断してその要素の数を表示しようと試みます。 デバッガーは配列の正確なバッファー サイズを常に判断できるとは限らないため、可能な場合には必ずサイズ指定子 (pBuffer,[bufferSize]) を使用してください。 hv 書式指定子は、バッファー サイズをすぐに利用できない場合に役立ちます。

配列としてのポインターのサイズ指定子

オブジェクトに対するポインターを配列として表示する場合、整数または式で配列要素数を指定できます。

指定子 形式 元の [ウォッチ] の値 表示される値
n 10 進数または 16 進数 の整数 pBuffer,[32]

pBuffer,[0x20]
pBuffer を 32 要素の配列として表示します。
[exp] 整数に評価される有効な C++ 式 pBuffer,[bufferSize] pBuffer を bufferSize 要素の配列として表示します。
expand(n) 整数に評価される有効な C++ 式 pBuffer, expand(2) pBuffer の 3 番目の要素を表示します

C++/CLI での相互運用機能デバッグ用の書式指定子

指定子 形式 元の [ウォッチ] の値 表示される値
o 符号なし 8 進整数。 0xF065 0170145
x

X
16 進整数 61541 0x0000f065
c 1 文字 <location> 101 'e'
s const char* (引用符あり) <location> "hello world"
su const wchar_t*

const char16_t* (引用符あり)
<location> L"hello world"
sub const wchar_t*

const char16_t*
<location> Hello World
s8 const char* (引用符あり) <location> "hello world"
時間 HRESULT または Win32 エラー コード。
この指定子は、デバッガーによって自動的にデコードされるため、HRESULT では不要になりました。
S_OK S_OK
wc Windows クラス フラグ 0x00000040, WC_DEFAULTCHAR
wm Windows メッセージ番号 0x0010 WM_CLOSE
! データ型の表示カスタマイズをすべて無視した、未処理の書式 <カスタマイズされた表現> 4

ネイティブおよび C++/CLI コードの d、e、f、g、h、i、l、m、ma、mb、md、mq、mu、mw、および u 指定子には、Visual Studio 2022 以降のバージョンではサポートされていないレガシ デバッガーが必要でした。

太字 で示されている指定子は、ネイティブおよび C++/CLI コードをデバッグする場合にのみサポートされます。 これらの指定子には、マネージド互換モードを使用して指定されたレガシ デバッガーが必要です。

指定子 形式 元の [ウォッチ] の値 表示される値
d

i
符号付き 10 進整数。 0xF000F065 -268373915
u 符号なし 10 進整数。 0x0065 101
o 符号なし 8 進整数。 0xF065 0170145
x

X
16 進整数 61541 0x0000f065
l

h
d、i、u、o、x、X の long 型または short 型のプレフィックス。 00406042 0x0c22
f 符号付き浮動小数点数値。 (3./2.), f 1.500000
e 符号付き指数表記。 (3.0/2.0) 1.500000e+000
g 符号付き浮動小数点数値または符号付き指数表記の
短い方
(3.0/2.0) 1.5
c 1 文字 <location> 101 'e'
s const char* (引用符あり) <location> "hello world"
su const wchar_t*

const char16_t* (引用符あり)
<location> L"hello world"
sub const wchar_t*

const char16_t*
<location> Hello World
s8 const char* (引用符あり) <location> "hello world"
時間 HRESULT または Win32 エラー コード。
この指定子は、デバッガーによって自動的にデコードされるため、HRESULT では不要になりました。
S_OK S_OK
wc Windows クラス フラグ 0x00000040, WC_DEFAULTCHAR
wm Windows メッセージ番号 0x0010 WM_CLOSE
! データ型の表示カスタマイズをすべて無視した、未処理の書式 <カスタマイズされた表現> 4

C++/CLI を使用した相互運用デバッグにおけるメモリの場所の書式指定子

メモリ位置を表すために使われる書式シンボルを次の表に示します。 メモリ位置指定子は、任意の値、または位置を評価する式に使用できます。

太字 で示されている指定子は、ネイティブおよび C++/CLI コードをデバッグする場合にのみサポートされます。 これには、マネージド互換モードを使用して指定されたレガシ デバッガーが必要です。

記号 形式 元の [ウォッチ] の値 表示される値
ma 64 ASCII 文字。 0x0012ffac 0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1
m 16 バイトの 16 進数。16 文字の ASCII 文字が続きます。 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.
mb 16 バイトの 16 進数。16 文字の ASCII 文字が続きます。 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.
mw 8 ワード。 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 ダブルワード。 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 クワドワード。 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
mu 2 バイト文字 (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

C++/CLI を使用した相互運用デバッグでの配列としてのポインターのサイズ指定子

オブジェクトに対するポインターを配列として表示する場合、整数で配列要素数を指定できます。

指定子 形式 表示される値
n 10 進整数 pBuffer[32] pBuffer を 32 要素の配列として表示します。