WAM 디버거

WAM 디버거

어떤 경우에는 WAM 데이터 구조에 접근하는 것이 유용해요. 이 하위 디버거는 사용자가 WAM의 어떤 스택이나 레지스터의 내용을 검사/수정할 수 있게 해줘요.

출처: GNU Prolog Manual - The WAM debugger

본문

어떤 경우에는 WAM 데이터 구조에 접근하는 것이 유용해요. 이 하위 디버거는 사용자가 WAM의 어떤 스택이나 레지스터의 내용을 검사/수정할 수 있게 해줘요. WAM 디버거는 내장 술어 wam_debug/0(5.3.1절) 또는 W 디버거 명령어(5.5절)로 호출돼요.

다음 표는 WAM 디버거의 특정 명령어를 보여줘요:

명령어 설명
write A [N] 주소 A에서 시작하는 N개의 항을 write/1(8.14.6절)로 쓰기
data A [N] 주소 A에서 시작하는 N개의 워드 표시
modify A [N] 주소 A에서 시작하는 N개의 워드 표시 및 수정
where A A에 해당하는 실제 주소 표시
what RA 실제 주소 RA에 해당하는 것 표시
deref A 주소 A에서 시작하는 역참조(dereferenced) 워드 표시
envir [SA] SA(또는 현재 것)에 위치한 환경의 내용 표시
backtrack [SA] SA(또는 현재 것)에 위치한 선택점의 내용 표시
backtrack all 모든 선택점 표시
quit WAM 디버거 종료
help 사용 가능한 명령어 요약 표시

위 표에서 다음 규약이 적용돼요:

  • [] 사이의 요소는 선택적이에요.
  • N은 선택적 정수(기본값 1).
  • A는 WAM 주소이며 그 구문은 BANK_NAME[N], 즉 인덱스(기본값 0)가 뒤따를 수 있는 뱅크 이름이에요. BANK_NAME은 다음 중 하나예요:
    • reg - WAM 일반 레지스터(스택 포인터, continuation 등).
    • x - WAM X 레지스터(임시 변수, 즉 인자).
    • y - WAM Y 레지스터(영구 변수).
    • ab - 현재 선택점에 저장된 WAM X 레지스터.
    • STACK_NAME - WAM 스택(STACK_NAMElocal, global, trail, cstr 중 하나).
  • SA는 WAM 스택 주소, 즉 STACK_NAME[N](WAM 주소의 특수한 경우).
  • RA는 실제 주소이며 그 구문은 C 정수의 구문(특히 0x... 표기 인식).

모호함이 없으면 명령어와 뱅크 이름의 앞 글자만 사용할 수 있어요. 또한 뱅크 이름의 인덱스를 둘러싸는 대괄호 []는 생략할 수 있어요. 예를 들어 다음 명령어(global 스택의 인덱스 3부터 25개의 연속 워드 내용 표시):

data global[3] 25

는 다음과 같이 축약할 수 있어요:

d g 3 25

더 알아보기