2004년 01월 22일
Maya API 강좌 4
/*
먼저, API 연재 #3에서 제가 실수한 것을 정정하도록 하겠습니다. (매번 실수하는군요)
김수현, 강성욱님께서 지적해 주셨듯이, MEL script의 마지막 부분을 아래와 같이 고쳐야 합니다.

doHelix -r $radius -p $pitch;

오랜만에 연재를 다시 올리니 저도 헷갈리네요.
그래도, 많은 분들의 관심과 참여에 감사드립니다.
*/

4. Debugging API MEL command
_______________________________________________

API 연재 #3에서 제가 release로 컴파일하지 말고 debug로 컴파일하라고 했었죠.
그래서, 이번엔 지난 시간에 만든 MEL command를 Debugging하는 법을 알아보도록 하겠습니다.

1) Debugging 모드로 Maya 실행하기
_______________________________________________

먼저 MS Visual C++을 실행시키고, File > Open Workspace...를 선택하셔서,
지난 번에 만든 doHelix.dsw를 선택하세요.
FileView에서 Source Files의 doHelixCmd.cpp를 클릭하시면
지난 번에 작성한 코드를 보실 수 있을 겁니다.

이제 Project > Settings...를 선택해서 Project Setting 윈도우를 띄우고
Debug 탭의 Executable for debug session:에
아래 그림과 같이 Maya 실행파일을 입력하세요.




그 다음, OK를 누르고, Debug > Go를 선택하시거나 F5 키를 누르시면 Maya가 실행될 것입니다.
중간에 나타나는 메시지는 모두 무시하셔도 괜찮고요.
이렇게 실행된 Maya에서 Plug-in Manager를 띄워
지금 개발중인 Plug-in 파일 즉, 여러분의 API 작업 디렉토리의 Debug 폴더에 생긴 mll파일을 선택하여 Plug-in을 Load합니다.

Maya의 Script Window에 아래와 같은 지난번 작성한 MEL을 입력하고 숫자 키패드 쪽의 Enter를 누른뒤,
helix라고 입력하고 다시 숫자 키패드 쪽의 Enter를 누르면 window가 생기고,
Debugging을 위한 준비가 끝나게 됩니다.

global proc helix()
{
window -t "HelixUI" helixWin;
columnLayout -adjustableColumn true;
floatSliderGrp -l "Radius" -v 4.0 -f true helixRadius;
floatSliderGrp -l "Pitch" -v 0.5 -f true helixPitch;

button -l "Make Helix" -c "makeHelix";

showWindow helixWin;
}

global proc makeHelix()
{
float $radius = `floatSliderGrp -q -v helixRadius`;
float $pitch = `floatSliderGrp -q -v helixPitch`;

doHelix -r $radius -p $pitch;
};


2) Visual C++에서의 Debugging

MEL로 만든 UI의 Make Helix 버튼을 누르면 바로 Helix가 만들어집니다.
이렇게 되어서는 Debugging을 할 수 없겠죠.

이제 아래 그림과 깉이 doHelix::doIt function의 시작 부분에 커서를 두고
오른쪽 버튼을 눌러서 Insert/Remove Breakpoint를 클릭하면
아래 그림과 같이 Break Point가 설정됩니다.




Break Point는 말 그래도 멈추는 지점이지요.
이제 이상태에서 Maya의 MEL UI의 Make Helix 버튼을 누르면
아래 그림과 같이 Plug-in의 수행이 Break Point에서 멈추게 됩니다.
이 상태에서 Debug > Step Into, Step Over, Step Out, Run To Cursor 등의 메뉴를 이용해서 Plug-in을 한 줄씩 또는 한 블럭 씩 수행시키면서 Debugging 하게 되는 것입니다.




Debugging은 우리가 작성한 프로그램이 원하는 대로 수행되는 지를 점검하면서 문제를 해결하는 것이지요.
어떤 변수의 값이 어떻게 변해가는 지를 확인하는 것은 Debugging 과정 중의 중요한 부분입니다.
그렇게 하기 위해서는, 살펴볼 변수를 등록하기만 하면 됩니다.

우선, 간단히 어떻게 돌아가는 지를 살펴보기 위해서
unsigned로 선언된 i라는 변수를 살펴 봅시다.
커서를 unsigned i; 에 두고, 오른쪽 버튼을 눌러
QuickWatch를 누르면 아래 그림과 같은 QuickWatch 윈도우가 뜹니다.
현재는 i가 아직 선언되지 않았기 때문에 3435973836같은
임의의 값이 들어 있습니다.




여기서 Add Watch 버튼을 누르면 아래 그림과 같이
i를 살펴볼 수 있도록 등록이 됩니다.




이제 Debug > Step Into 나 F11을 눌러서 프로그램을 진행하면서 i의 변화를 살펴봅시다.

F11을 몇 번 눌러서 아래 그림과 같이 첫번째 For-loop에 들어오게 되면
For-loop의 i = 0 구문에 의해서 i의 값이 0으로 변합니다.
이때, 이 For-loop은 args.length()의 값만큼 반복되게 되지요.

args.length()는 MEL command에 전달되는 argument의 개수를 돌려주는 함수이니까
우리의 MEL UI에서 MEL command로 보내지는 명령은
doHelix -r $radius -p $pitch 이므로
-r, $raidius의 값, -p, $pitch의 값 이렇게 총 4가 되겠죠.

F11을 계속 눌러 보세요,
i의 값이 4가 될때까지 그 For-loop을 반복하다가 빠져나오는 것을 보실 수 있을겁니다.




다음 For-loop은 ncvs의 값 만큼 반복되게 되어있군요.
근데, ncvs의 값은 무려 20 이나 되는데,
20번 반복할 때까지 F11을 누르자니 너무 벅차지요?
이럴 때는, For-loop 다음위치에 cursor를 두고
Debug > Run to Cursor를 선택하면 바로 그 위치로 이동이 됩니다.

이런 식으로 변수의 값을 살피면서 프로그램을 Debugging할 수 있는 것입니다.
Visual C++의 Debugging에 대하여는 여기서 자세히 설명하지는 않겠습니다.
더 궁금하신 분은 주위의 Visual C++ 프로그래머들이나 책을 통해서 공부하세요.

다음에는, 이 MEL command를 undo/redo가 가능하도록 만들어 보도록 하겠습니다.
_______________________________________________
오늘은 여기까지. 질문들 하세요.
by gyedo | 2004/01/22 14:49 | Maya API | 트랙백 | 덧글(0)
트랙백 주소 : http://gyedo.egloos.com/tb/232748
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>