[ < ] | [ > ] | [ << ] | [ 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 에는 다음중에서 하나 이상의 옵션이 올 수 있다.
t
m4
를 호출할 때 만들어지는 모든 매크로 호출을 추적한다.
o
각각의 매크로 호출에서 활성화 되는 인자를 보여준다. `t' 옵션과
같이 사 용될 경우에는 모든 매크로 호출에 적용되고 아니면
traceon
으로 지정 된 매크로에만 적용된다.
e
확장되는 매크로라면 각 매크로의 확장되는 것을 보여준다. `t' 옵션이
사용되었다면 모든 매크로 호출에 적용되고, 아니면 traceon
으로
지정된 매 크로에만 적용된다.
q
현재 인용구를 보여줄 때 활성화된 인자와 매크로 확장을 인용부호로 둘러 싼다.
c
각각의 매크로 호출당 여러줄의 추적사항을 보여준다. 첫 번째 줄은 매크 로가 보일 때 보여주고, 둘째 줄은 인자가 수집될 때, 셋째줄은 호출이 완료된 후에 보여준다.
x
traceon 이 적용될 때 출력되는 각각의 줄에 유일한 '매크로 호출 아이디'를 보여준다. 이것은 위에서 설명한 `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 by Autobuild on March, 29 2007 using texi2html 1.76.