| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
m4 에서 매크로를 작성할 때, 거의 모든 부분들이 다 의도한 데로
된다고 볼수 는 없다. 요즘의 거의 모든 프로그래밍 언어들이 그렇기는
하지만.. 그래서 m4에서도 간단한 디버깅에 사용할 수 있는 매크로를
제공한다.
| 6.1 매크로 정의를 보기 | ||
| 6.2 매크로 호출을 추적하기 | ||
| 6.3 디버깅 출력을 제어하기 | ||
| 6.4 디버깅 출력을 저장하기 |
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
매크로 명칭이 어떻게 확장되는지 그 정의를 내장 매크로인 dumpdef를
사용하여 볼 수 있다.
dumpdef(...)
인자의 수에는 제한이 없다. 아무런 인자로 없이 호출한다면, 그것은 현재 알려 져 있는 모든 명칭의 정의를 보여 줄 것이다. 다른 경우는 주어진 인자와 같은 정의만 보여준다. 출력은 바로 표준 에러 출력으로 찍혀 나온다.
dumpdef 는 확장되지 않는다.
define(`foo', `Hello world.') ⇒ dumpdef(`foo') error-->foo: `Hello world.' ⇒ dumpdef(`define') error-->define: <define> ⇒
마지막 예는 내장 매크로 정의를 보여주는 방법을 보여준다.
메시지를 제어하는 자세한 정보는 See section 디버깅 출력을 제어하기.
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
매크로에서 호출과 확장되는 것을 내장 매크로 traceon과 traceoff를
사용하여 추적할 수 있다.
traceon(...) traceoff(...)
아무런 인자도 없이 호출한다면, traceon과 traceoff는 정의된
모든 매크로에 대한 추적을 실행하거나 취소할 것이다. 인자를 주어서
호출한다면 해당 매크로만 영향을 미친다.
traceon과 traceoff는 확장되지 않는다.
매크로가 추적되고 있는 상태에서 호출되고 인자를 취한다면 그 호출은 메시지 로 볼 수 있다. 매크로 호출이 확장되는 것이라면 호출이 된 후에 보여준다. 그 출력은 표준에러출력으로 바로 찍힌다.
define(`foo', `Hello World.') ⇒ define(`echo', `$@') ⇒ traceon(`foo', `echo') ⇒ foo error-->m4trace: -1- foo -> `Hello World.' ⇒Hello World. echo(gnus, and gnats) error-->m4trace: -1- echo(`gnus', `and gnats') -> ``gnus',`and gnats'' ⇒gnus,and gnats
줄문자(‘-’) 사이의 숫자는 확장되는 단계의 깊이를 나타낸다. 이것은 거의 대부 분의 경우에 하나만으로도 충분하다. 그러나 인자가, 따옴표로 묶지 않은 매크로 호출을 포함할 때에는 증가 할 수 있다.
출력을 제어하는 더 자세한 정보는 See section 디버깅 출력을 제어하기
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
m4에서 ‘-d’ 옵션은 매크로를 사용할 때 제공되는 정보의 양을
제어한다.
아래에서의 flag 에는 다음중에서 하나 이상의 옵션이 올 수 있다.
tm4 를 호출할 때 만들어지는 모든 매크로 호출을 추적한다.
o각각의 매크로 호출에서 활성화 되는 인자를 보여준다. ‘t’ 옵션과
같이 사 용될 경우에는 모든 매크로 호출에 적용되고 아니면
traceon으로 지정 된 매크로에만 적용된다.
e확장되는 매크로라면 각 매크로의 확장되는 것을 보여준다. ‘t’ 옵션이
사용되었다면 모든 매크로 호출에 적용되고, 아니면 traceon 으로
지정된 매 크로에만 적용된다.
q현재 인용구를 보여줄 때 활성화된 인자와 매크로 확장을 인용부호로 둘러 싼다.
c각각의 매크로 호출당 여러줄의 추적사항을 보여준다. 첫 번째 줄은 매크 로가 보일 때 보여주고, 둘째 줄은 인자가 수집될 때, 셋째줄은 호출이 완료된 후에 보여준다.
xtraceon 이 적용될 때 출력되는 각각의 줄에 유일한 ’매크로 호출 아이디’를 보여준다. 이것은 위에서 설명한 ‘c’ 플래그와 함께 사용하면 유용하다.
f각각의 추적되는 라인 마다에 현재의 입력 파일의 이름을 덧붙인다.
l각각의 추적되는 라인 마다에 현재의 줄번호를 덧붙인다.
p지정한 파일이 경로 검색 알고리즘에 의해 발견된다면 활성화된 파일이름 을 출력한다. ( 활성화된 파일 이름을 지정하는 것은 see section 삽입할 파일 검색하기.)
i현재의 입력 파일이 바뀔 때 마다 파일이름과 입력 줄 번호의 메시지를 출력한다.
V위에서 설명한 모든 플래그 들을 간단하게 보여준다.
‘-d’ 옵션과 함께 아무런 플래그도 설정되지 않았다면, 기본은 ‘aeq’로 된다. 위에서 설명한 두 개의 예제는 기본 플래그가 세팅되어 있다고 가정했다.
내장 매크로인 debugmode는 출력되는 디버깅 정보를 제어하는 데
환상적인 역할을 한다.
debugmode(opt flags)
여기서 flags는 위에서 설명한 인자의 부분 집합이 될 수 있다. 특별한 경우에 인자가 ‘+’로 시작한다면 그 플래그는 현재의 디버깅 플래그에 추가된다. 그리고 ‘-’로 시작한다면 그 플래그는 제거된다. 아무런 인자도 없다면, 디버깅 플래그는 아무것도 설정되지 않게 된다. (‘-d’ 옵션을 주지 않은 것처럼 된다.) 그리고 텅 빈 인자는 플래그를 기본으로 재설정하게 된다.
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
디버깅 정보와 추적 정보는 ‘-o’ 옵션을 사용하여 파일로 리다이렉트 할
수 있 다. 또는 내장 매크로인 debugfile을 사용하여 지정할 수 있다.
debugfile(opt filename)
이것은 모든 디버깅과 추적 메시지의 출력을 filename으로 보낸다.
filename을 비게 만든다면, 디버깅와 추적 메시지는 취소되고
debugfile이 아무런 인자도 없이 호출되었다면, 디버깅과 추적
메시지는 표준에러출력으로 보내진다.
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on April 12, 2025 using texi2html 5.0.