Graphisoft®

GSRootVersion: 1.0

DBPrintf

DBPrintf 함수는 현재 애플리케이션의 디버거에게 포맷화된 문자열을 보내줍니다. 모든 인수들은 포맷 문자열의 해당 포맷 사양에 따라 변환됩니다. 이 함수는 문자열 위에 null 문자를 덧붙입니다.

void DBPrintf(
  const char    *format,   // 포맷-제어 문자열을 가리키는 포인터
  ...                      // 선택적인 인수
);

 

파라미터

format
포맷-제어 사양을 포함하는 null로 종료되는 문자열을 가리키는 포인터입니다. 일반 ASCII 문자열뿐만 아니라 각 인수에 대한 포맷 사양이 이 문자열에 표시됩니다. 포맷 사양에 대한 더 많은 정보는 Remarks 섹션을 보십시오.
...
1개 이상의 선택적인 인수들을 지정합니다. 인수 파라미터들의 개수와 타입은 format 파라미터 안에 있는 해당 포맷-제어 사양에 따라 달라집니다.

설명

DBPrintf 함수의 행동은 플랫폼 의존적입니다.

Windows:
만약 애플리케이션이 고유의 디버거를 갖고 있지 않다면, 시스템 디버거가 문자열을 표시합니다. 만약 애플리케이션이 디버거가 없거나 시스템 디버거가 활성화되어 있지 않다면, DBPrintf는 작동하지 않습니다; 함수를 호출할 때 커맨드가 실행되지 않습니다.

Macintosh:
디버그 모니터가 문자열들을 디버그 모니터 구성요소에게 전송합니다. 이 구성요소를 Extensions 폴더에 두십시오. 그러면 시작할 때 Component Manager가 자동으로 디버거를 사용할 수 있도록 등록합니다. 디버그 모니터 구성요소는 디버그 모니터와 연락하여 디버그 문자열에 대한 정보를 모읍니다. 참고로 프로그램 내에서 이 함수를 사용하고 싶고 디버그 모니터를 통해 디버그 메시지를 보려면, 올바른 기능을 위해 그래픽 포트를 초기화해야 합니다.

포맷-제어 문자열:
포맷-제어 문자열은 다음 format 파라미터에 포함된 인수들에 대한 출력 포맷을 결정하는 포맷 사양들을 포함하고 있습니다. 아래에서 논의하듯이 포맷 사양은 항상 퍼센트 기호(%)로 시작합니다. 만약 퍼센트 기호 다음에 문자가 붙어 있는데 포맷 필드로 정의되지 않았다면 다음 문자는 포맷화되지 않습니다. (예를 들면, %%는 하나의 퍼센트 기호 문자를 표시합니다)

포맷-제어 문자열은 왼쪽부터 오른쪽으로 읽혀집니다. 혹시 처음 포맷 사양을 만나게 되면, 포맷 제어 문자열 이후의 1번째 인수의 값을 변환한 결과가 나오게 됩니다. 포맷 사양에 따라 변환이 완료됩니다. 그리고 결과로 나온 문자열은 출력 버퍼에 복사됩니다. 그 이후의 포맷 사양도 변환되고 출력 버퍼에 복사됩니다. 만약 포맷 사양보다 더 많은 인수들이 있으면 추가 인수들은 무시합니다. 만약 모든 포맷 사양에 미치지 않는 수의 인수들이 있으면 결과는 정의되지 않습니다.

포맷 사양은 다음과 같은 형태를 갖고 있습니다:

%[-][#][0][width][.precision]type

각 필드는 특정 포맷 옵션을 표시하는 단일 문자 또는 단일 숫자입니다. 포맷 사양에서 마지막에 있는 type 문자들은 관련 인수가 문자, 문자열, 혹은 숫자로 해석되는지 여부를 결정합니다. 가장 단순한 포맷 사양은 퍼센트 기호와 하나의 type 문자만 포함하는 것입니다. (예를 들면, %s) 선택적인 필드들은 포맷화의 다른 양상을 제어합니다. 다음은 선택/필수 필드들과 해당 의미를 보여줍니다:

필드 의미
필드 폭을 채우기 위해 출력 문자열의 우측에 공백이나 0으로 패딩하고 내용물을 왼쪽으로 당깁니다. 이 필드가 생략되면 출력은 왼쪽으로 패딩되고 내용물을 오른쪽으로 당깁니다.
# 16진수 값을 표현하는 접두사입니다. 0x (소문자) 또는 0X (대문자)
0 필드 폭을 채우기 위해 출력 문자열을 0으로 패딩합니다. 이 필드가 생략되면 출력 값은 공백으로 패딩됩니다.
width 출력 버퍼에 복사되는 글자들의 최소 개수를 지정합니다. width 필드는 0 이상의 정수입니다. width 필드를 지정한다고 해서 값이 잘리는 일은 없습니다; 만약 출력 값의 글자 개수가 지정한 width보다 크거나, width 필드가 존재하지 않는다면, precision 사양이 적용되는 값의 모든 문자들이 인쇄됩니다.
.precision 숫자의 경우, 출력 버퍼에 복사되는 숫자들의 최소 자릿수를 지정합니다. 만약 인수의 자릿수가 지정한 precision보다 작으면, 출력 값은 왼쪽에 0으로 패딩됩니다. 자릿수가 지정한 precision을 초과해도 값은 잘리지 않습니다. 만약 지정한 precision이 0이거나 완전히 생략하거나, 혹은 숫자 없이 period (.)가 나온다면 precision은 1로 설정됩니다.
문자열의 경우, 출력 버퍼에 복사되는 문자들의 최대 개수를 지정합니다.
type 해당 인수는 문자, 문자열, 또는 숫자로 복사됩니다. 이 필드는 다음 문자 시퀀스 중 아무 것이나 될 수 있습니다:
문자 타입 출력 포맷
c int 또는 wint_t 단일-바이트 문자.
C int 또는 wint_t 와이드 문자.
d int 부호화된 10진수 정수.
i int 부호화된 10진수 정수.
o int 부호화되지 않은 8진수 정수.
u int 부호화되지 않은 10진수 정수.
x int 부호화되지 않은 16진수 정수. “abcdef.”를 사용합니다.
X int 부호화되지 않은 16진수 정수. “ABCDEF.”를 사용합니다.
e double [ – ]d.dddd e [sign]ddd 형태를 갖는 부호화된 값. 여기서 d는 단일 10진수, dddd는 1개 이상의 10진수, ddd는 정확히 3자리 10진수, sign은 + 또는 –입니다.
E double e가 아닌 E가 지수(exponent)를 도입한다는 점을 제외하고는 e 포맷과 동일합니다.
f double [ – ]dddd.dddd 형태를 갖는 부호화된 값. 여기서 dddd는 1개 이상의 10진수입니다. 소수점 앞의 숫자 개수는 숫자의 자릿수에 따라 달라집니다. 그리고 소수점 뒤의 숫자 개수는 요청한 precision에 따라 달라집니다.
g double f 또는 e 형식으로 출력되는 부호화된 값. 주어진 값과 정밀도에 대해 더 컴팩트합니다. e 포맷은 값의 지수(exponent)가 -4 미만이거나 precision 인수와 같을 때만 사용됩니다. 뒤에 따라 붙는 0들은 잘리고 소수점 이하 숫자가 1개 이상 있어야만 소수점이 나타납니다.
G double g 포맷과 동일하지만, e가 아닌 E가 지수를 도입한다는 점을 제외하면 (적절한 경우)
n Pointer to integer 지금까지 스트림 또는 버퍼에 성공적으로 작성된 문자들의 개수; 이 값은 인수에 주소가 지정된 정수에 저장됩니다.
p Pointer to void 인수에서 가리키는 주소를 xxxx:yyyy 형태로 출력합니다. 여기서xxxx는 세그먼트를, yyyy는 오프셋을 의미합니다. 그리고 xy의 숫자는 대문자 16진수입니다.
s String 단일 바이트-문자 문자열입니다. 문자들은 첫 번째 null 문자에 도달할 때까지, 또는 precision 값에 도달할 때까지 출력됩니다.
S String 와이드-문자 문자열입니다. 문자는 첫 번째 null 문자에 도달할 때까지, 또는 precision 값에 도달할 때까지 출력됩니다.

참고  DBPrintf는 pASCAL 호출 규칙이 아닌 C 호출 규칙(_cdecl)을 사용합니다. 결과적으로, 스택에서 인수들을 꺼내는 것은 호출 프로세스의 책임이며, 스택 상에서 인수는 오른쪽에서 왼쪽으로 넣습니다. C-언어 모듈에서 C 컴파일러는 이 작업을 수행합니다.

요구사항

    헤더: GSDebug.hpp에 선언됨
    라이브러리 가져오기:GSRootImp.lib와 링크

참고사항

디버그 관리자 매크로, 디버그 관리자 함수