다음을 통해 공유


Visual Studio 디버거에서 C++에 대한 형식 지정자

서식 지정자를 사용하여 Watch, AutosLocals 창에 값이 표시되는 형식을 변경할 수 있습니다.

직접 실행 창, 명령 창, 추적점 및 원본 창에서도 서식 지정자를 사용할 수 있습니다. 해당 창의 식에서 일시 중지하면 결과가 DataTip에 표시됩니다. DataTip 디스플레이는 형식 지정자를 반영합니다.

비고

Visual Studio 네이티브 디버거가 새 디버깅 엔진으로 변경되면 일부 새 형식 지정자가 추가되고 일부 이전 형식 지정자가 제거되었습니다. 이전 디버거는 C++/CLI를 사용하여 interop(혼합 네이티브 및 관리형) 디버깅을 수행할 때에도 계속 사용됩니다.

형식 지정자 설정

다음 예제 코드를 사용합니다.

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

디버깅 중에 my_var1 변수를 조사식 창에 추가합니다. 디버그>Windows>조사식>1. 그런 다음 변수를 마우스 오른쪽 단추로 클릭하고 16진수 표시를 선택합니다. 이제 Watch 창에 0x0065 값이 표시됩니다. 이 값을 정수가 아닌 문자로 표현하려면 먼저 마우스 오른쪽 단추를 클릭하고 16진수 표시를 선택 취소합니다. 그런 다음 변수 이름 다음에 Name 열에 문자 형식 지정자 c를 추가합니다. 이제 열에 101 'e'가 표시됩니다.

값이 101 'e'이고 int 유형이 있는 my_var1.c를 보여 주는 선택한 줄이 있는 Visual Studio Watch 창의 스크린샷

조사식 창의 값 뒤에 쉼표(,)를 추가하면 사용 가능한 형식 지정자 목록을 볼 수 있고 선택할 수 있습니다.

WatchFormatSpecDropdown

서식 지정자

다음 표에서는 Visual Studio에서 사용할 수 있는 형식 지정자에 대해 설명합니다. 굵게 표시된 지정자는 C++/CLI를 사용한 interop 디버깅이 아니라 새 디버거에 대해서만 지원됩니다.

지정자 포맷 원래 감시 값 표시된 값
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 부호 없는 이진 정수 이십오 (25) 0b00000000000000000000000000011001
bb 부호 없는 이진 정수(선행 0b 제외) 이십오 (25) 00000000000000000000000000011001
e 과학적 표기법 25000000 2.500000e+07
g 과학 또는 부동 소수점의 짧은 25000000 2.5e+07
c 단일 문자 0x0065 101 ‘이’
s const char* 문자열(따옴표 포함) <위치> "hello world" 안녕 세상아
sb const char* 문자열(따옴표 없음) <위치> "hello world" 전 세계 여러분 안녕하세요
s8 UTF-8 문자열 <위치> "이것은 UTF-8 커피 컵 ☕" "이것은 UTF-8 커피 컵 ☕"
s8b UTF-8 문자열(따옴표 없음) <위치> "hello world" 전 세계 여러분 안녕하세요
유니코드(UTF-16 인코딩) 문자열(따옴표 포함) <위치> L"hello world" L"안녕하세요, 세계"

안녕하세요 세계
하위 유니코드(UTF-16 인코딩) 문자열(따옴표 없음) <위치> L"hello world" 전 세계 여러분 안녕하세요
bstr BSTR 이진 문자열(따옴표 포함) <위치> L"hello world" L"안녕하세요, 세계"
환경 환경 블록(이중 null로 종료된 문자열) <위치> L"=::=::\\" L"=:::=::\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 UTF-32 문자열(따옴표 포함) <위치> U"hello world" U"안녕하세요 세계"
s32b UTF-32 문자열(따옴표 없음) <위치> U"hello world" 전 세계 여러분 안녕하세요
en enum 토요일(6) 토요일
hv 포인터 형식 - 검사 중인 포인터 값이 배열의 힙 할당 결과임을 나타냅니다. 예를 들면 다음과 같습니다 new int[3]. <위치>{<첫 번째 멤버>} <위치>{<첫 번째 구성원>, <두 번째 구성원>, ...}
na 개체에 대한 포인터의 메모리 주소를 표시하지 않습니다. <___location>, {member=value...} {member=value...}
nd 파생 클래스를 무시하고 기본 클래스 정보만 표시합니다. (Shape*) square 기본 클래스 및 파생 클래스 정보를 포함합니다. 기본 클래스 정보만 표시합니다.
hr HRESULT 또는 Win32 오류 코드입니다. 디버거가 자동으로 디코딩하므로 HRESULT에는 이 지정자가 더 이상 필요하지 않습니다. S_OK S_OK
화장실 창 클래스 플래그 0x0010 WC_DEFAULTCHAR
(Assuming "wm" stands for "window manager") 윈도우 관리자 Windows 메시지 번호 16 WM_CLOSE
nr "원시 보기" 항목 숨기기
nvo 숫자 값에 대해서만 "원시 보기" 항목 표시
! 원시 형식, 데이터 형식 뷰 사용자 지정 무시 <사용자 지정된 표현> 4
핸들 win32 핸들에 대한 정보를 표시합니다. 0x000000000000009c 스레드 ID 등과 같은 핸들에 대한 유용한 정보를 표시합니다.

비고

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

C++/CLI를 사용하여 interop 디버깅을 위한 형식 지정자

지정자 포맷 원래 감시 값 표시된 값
o 부호 없는 8진수 정수 0xF065 0170145
x

X
16진수 정수 61541 0x0000f065
c 단일 문자 <위치> 101 ‘이’
s const char*(따옴표 포함) <위치> 안녕 세상아
const wchar_t*

const char16_t*(따옴표 포함)
<위치> L"안녕하세요, 세계"
하위 const wchar_t*

const char16_t*
<위치> 전 세계 여러분 안녕하세요
s8 const char*(따옴표 포함) <위치> 안녕 세상아
hr HRESULT 또는 Win32 오류 코드입니다.
디버거가 자동으로 디코딩하므로 HRESULT에는 이 지정자가 더 이상 필요하지 않습니다.
S_OK S_OK
화장실 창 클래스 플래그 0x00000040 WC_DEFAULTCHAR
(Assuming "wm" stands for "window manager") 윈도우 관리자 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 00406042 0x0c22
f 부호 있는 부동 소수점 (3./2.), f 1.500000
e 서명된 과학적 표기법 (3.0/2.0) 1.500000e+000
g 부동 소수점 또는 서명된 과학적 표기법,
더 짧은 것 중 하나
(3.0/2.0) 1.5
c 단일 문자 <위치> 101 ‘이’
s const char*(따옴표 포함) <위치> 안녕하세요, 세상
const wchar_t*

const char16_t*(따옴표 포함)
<위치> L"안녕하세요, 세계"
하위 const wchar_t*

const char16_t*
<위치> 전 세계 여러분 안녕하세요
s8 const char*(따옴표 포함) <위치> 안녕 세상아
hr HRESULT 또는 Win32 오류 코드입니다.
디버거가 자동으로 디코딩하므로 HRESULT에는 이 지정자가 더 이상 필요하지 않습니다.
S_OK S_OK
화장실 창 클래스 플래그 0x00000040 WC_DEFAULTCHAR
(Assuming "wm" stands for "window manager") 윈도우 관리자 Windows 메시지 번호 0x0010 WM_CLOSE
! 원시 형식, 데이터 형식 뷰 사용자 지정 무시 <사용자 지정된 표현> 4

C++/CLI를 사용하여 interop 디버깅의 메모리 위치에 대한 형식 지정자

다음 표에서는 메모리 위치에 사용되는 서식 기호에 대해 설명합니다. 위치로 계산되는 값이나 식과 함께 메모리 위치 지정자를 사용할 수 있습니다.

게 표시된 지정자는 네이티브 및 C++/CLI 코드 디버깅에만 지원됩니다. 이를 위해서는 관리되는 호환성 모드를 사용하여 지정된 레거시 디버거가 필요합니다.

기호 포맷 원래 감시 값 표시된 값
엄마 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 7ffdf00000000000000 5f441a790012fdd4
2 바이트 문자(유니코드) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

C++/CLI를 사용하여 interop 디버깅에서 배열로 포인터의 크기 지정자

배열로 보려는 개체에 대한 포인터가 있는 경우 정수를 사용하여 배열 요소의 수를 지정할 수 있습니다.

지정자 포맷 Expression 표시된 값
n 10진수 정수 pBuffer[32] pBuffer 32개 요소 배열로 표시됩니다.