다음을 통해 공유


네이티브 C++ 식의 제한

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

/F

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Pro, Premium 및 Ultimate

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

디버거 창에 C/C++ 식을 입력하면 다음과 같은 일반적인 제한이 적용됩니다.

액세스 제어

디버거는 액세스 제어에 관계 없이 모든 클래스 멤버에 액세스할 수 있습니다. 따라서 기본 클래스와 포함된 멤버 개체뿐 아니라 모든 클래스 개체 멤버를 검사할 수 있습니다.

모호한 참조

디버거 식이 모호한 멤버 이름을 참조하면 클래스 이름을 사용하여 한정해야 합니다. 예를 들어, CObject가 AClass 및 BClass에서 expense라는 멤버 함수를 상속하는 CClass의 인스턴스이면 CObject.expense는 모호한 참조입니다. 다음과 같은 방법으로 모호성을 해결할 수 있습니다.

CObject.BClass::expense

식 계산기에서는 모호성을 해결하기 위해 멤버 이름에 표준 우위 규칙을 적용합니다.

익명 네임스페이스

네이티브 C++ 식 계산기는 익명 네임스페이스를 지원하지 않습니다. 예를 들어 다음과 같은 코드가 있다고 가정합니다.

#include "stdafx.h"

namespace mars

{

namespace

{

int test = 0;

}

}

int main()

{

// Adding a watch on test does not work.

mars::test++;

return 0;

}

이 예제에서 기호 test를 조사하려면 데코레이팅된 이름을 사용해야 합니다.

(int*)?test@?A0xccd06570@mars@@3HA

생성자, 소멸자 및 변환

명시적으로나 암시적으로 임시 개체 생성을 호출하는 식을 사용하여 개체에 대한 생성자나 소멸자를 호출할 수 없습니다. 예를 들어, 다음 식을 사용하여 명시적으로 생성자를 호출하면 오류 메시지가 나타납니다.

Date( 2, 3, 1985 )

클래스로 변환하는 경우에는 변환 함수를 호출할 수 없습니다. 이러한 변환에는 개체 생성이 포함됩니다. 예를 들어, myFraction 이 변환 함수 연산자 FixedPoint를 정의하는 CFraction의 인스턴스인 경우에 다음 식을 사용하면 오류가 발생합니다.

(FixedPoint)myFraction

그러나 기본 제공 형식으로 변환하는 경우에는 변환 함수를 호출할 수 있습니다. CFraction이 변환 함수 operator float를 정의하면 디버거에서 다음 식을 사용할 수 있습니다.

(float)myFraction

개체를 반환하거나 지역 개체를 선언하는 함수를 호출할 수 있습니다.

new 또는 delete 연산자는 호출할 수 없습니다. 디버거에서 다음 식을 사용하면 제대로 실행되지 않습니다.

new Date(2,3,1985)

상속

디버거를 사용하여 가상 기본 클래스가 있는 클래스 개체를 표시하면, 각 상속 경로마다 가상 기본 클래스의 멤버가 표시됩니다. 그러나 이 멤버의 인스턴스는 하나만 저장됩니다.

가상 함수 호출은 식 계산기에서 올바르게 처리됩니다. 예를 들어, CEmployee 클래스에서 가상 함수 computePay가 정의되는데, 이 함수가 CEmployee로부터 상속되는 클래스에서 재정의된다고 가정합시다. 그러면 CEmployee에 대한 포인터를 통해 computePay를 호출하여 해당 함수를 실행할 수 있습니다.

empPtr->computePay()

파생된 클래스 개체에 대한 포인터를 기본 클래스 개체에 대한 포인터로 캐스팅할 수는 있지만 반대로 캐스팅할 수는 없습니다.

내장 및 인라인 함수

디버거 식에서는 일반 함수로 한 번 이상 나온 함수만 내장 함수나 인라인 함수로 사용하여 호출할 수 있습니다.

숫자 상수

디버거 식에는 8진수, 16진수 또는 10진수 정수 상수를 사용할 수 있습니다. 디버거의 기본 설정은 10진수 상수를 사용하도록 설정되어 있습니다. 이 설정은 디버깅 탭의 일반 페이지에서 변경할 수 있습니다.

접두 또는 접미 기호를 사용하면 다른 형식의 숫자를 표시할 수 있습니다. 다음 표에서는 사용할 수 있는 형식을 설명합니다.

구문

예제(10진수 100)

기준

digits

100 또는 64

현재 설정에 따라 10진수 또는 16진수

0digits

0144

8진수

0ndigits

0n100

10진수

0xdigits

0x64

16진수

digitsh

64h

16진수

연산자 함수

디버거 식에서는 암시적으로나 명시적으로 클래스에 대한 연산자 함수를 호출할 수 있습니다. 예를 들어, myFraction 및 yourFraction이 operator+를 정의하는 클래스의 인스턴스라고 가정합시다. 다음 수식을 사용하면 두 개체의 합을 표시할 수 있습니다.

myFraction + yourFraction

연산자 함수가 friend로 정의되면, 멤버 함수에 대한 구문과 동일한 구문을 사용하여 암시적으로 호출할 수도 있고, 다음과 같이 명시적으로 호출할 수도 있습니다.

operator+( myFraction, yourFraction )

일반 함수와 마찬가지로 연산자 함수는 개체 생성을 포함한 변환이 필요한 인수를 사용하여 호출할 수 없습니다.

디버거는 const 및 비 const 버전이 있는 오버로드된 연산자를 지원하지 않습니다. const 및 비 const 버전이 있는 오버로드된 연산자는 표준 템플릿 라이브러리에 자주 사용됩니다.

오버로딩

함수가 정확하게 일치하거나 개체 생성을 포함한 변환을 하지 않고도 일치하는 경우에는 디버거 식에서 오버로드된 함수를 호출할 수 있습니다. 예를 들어, calc 함수에서 CFraction 개체를 매개 변수로 사용하고 CFraction 클래스에 정수를 받는 단일 인수 생성자가 정의될 경우, 다음 식을 사용하면 오류가 발생합니다.

calc( 23 )

calc에 적합한 CFraction 개체로 정수를 변환하는 올바른 변환이 있더라도 이러한 변환은 개체 생성을 포함하므로 지원되지 않습니다.

우선 순위

디버거 식에 포함된 C++ 범위 연산자(::)는 소스 코드에 있는 범위 연산자보다 우선 순위가 낮습니다. C++ 소스 코드에서는 범위 연산자의 우선 순위가 가장 높습니다. 디버거에서 범위 연산자의 우선 순위는 기본 및 후위 연산자(->, ++, --)와 단항 연산자(!, &, * 등) 사이입니다.

기호 형식

모든 디버그 정보(/Zi 또는 /ZI)를 사용하여 컴파일된 모듈에 기호가 있으면 소스 코드에 사용된 폼과 동일한 폼의 기호를 포함하는 디버거 식을 입력합니다. /Zd를 사용하여 컴파일된 모듈이나 라이브러리의 공용 기호가 포함된 식을 입력할 경우에는 개체 코드에 사용되는 형식의 데코레이팅된 기호 이름을 사용해야 합니다. 자세한 내용은 /Z7, /Zd, /Zi, /ZI(디버깅 정보 형식)를 참조하십시오.

LINK /MAP 옵션을 사용하면 데코레이드된 형식과 데코레이팅되지 않은 형식의 모든 이름 목록을 얻을 수 있습니다. 자세한 내용은 /MAP(맵 파일 생성)을 참조하십시오.

이름 데코레이션은 형식 안전 링크를 적용하는 데 사용하는 메커니즘입니다. 즉, 철자, 대/소문자, 호출 규칙, 형식 등이 정확하게 일치하는 이름과 참조만이 서로 링크됩니다.

암시적 또는 명시적으로 _cdecl 키워드를 사용하여 C 호출 규칙으로 선언되는 이름은 밑줄(_)로 시작합니다. 예를 들어, main 함수는 _main으로 표시될 수 있습니다. _fastcall로 선언되는 이름은 @ 기호로 시작합니다.

C++에서 데코레이팅된 이름은 호출 규칙 외에 기호 형식을 인코딩합니다. 이 이름 형식은 너무 길어서 읽기 어렵습니다. 이름은 하나 이상의 물음표(?)로 시작합니다. C++ 함수의 데코레이션에는 함수 범위, 함수 매개 변수 형식 및 함수 반환 형식이 포함됩니다.

형식 캐스팅

형식으로 캐스팅하면 그 형식을 디버거에 전달해야 합니다. 프로그램에는 동일한 형식의 다른 개체가 있어야 합니다. typedef 문을 사용하여 만든 형식은 사용할 수 없습니다.

참고 항목

기타 리소스

네이티브 C++ 언어 식