삽질하는플머

루아 디버깅 테스트

탐구생활/Lua
게임오븐을 보고... 며칠간 잠을 설쳤다. "디버깅이 되는구나... 디버깅이 되는구나... 디버깅이 되는구나... "
도대체 어떤 멋진 PM이 이런 계획을 세우고 또 어떤 멋진 프로그래머가 그 계획을 구체화 시켰을까...
진짜 부럽고 부럽고 부러웠다.

나도 저런 것 만들어보고 싶어~~ 라는 기분도 참 오래간만에 느껴보았다.
디버거만 있다면 우리 회사 기획자들을 내가 만든 루아지옥에서 건져올려 좀 더 가정에 충실하게 만들 수 있을텐데...

우리 게임의 경우 서버와 클라이언트의 글루함수 및 호출규약이 많이 다르다. 따라서 게임오븐처럼 통일된 IDE에서 클라이언트, 또는 서버를 구동시키는 것은 그다지 효율적이지 않다. 뭐 조금 바뀔 때 마다 툴도 손대야 하는 상황은 이제 정말 싫어... 한 번 만들어놓고 멀건 국물 나올 때 까지 울궈먹는 게 무엇보다 쵝오.

때문에 디버거를 루아 모듈로 만들어 기존 환경에서 구동시키는 쪽으로 살짝 생각을 바꿔보았다. 그래서 탄생한 물건이 바로 이 놈!!

dbgtest.zip



단독실행이 아닌 모듈이기 때문에 기존 루아환경에서 불러들여야 한다. 뭐 멀리서 찾을 것 없이 lua.org 에서 배포하는 윈32용 루아 바이너리를 내려받자.

압축을 풀고 dbgtest.dll 을 여기에 복사 해 넣자. 이제 lua5.1.exe 을 실행시키고 다음과 같이 디버그 패키지를 부른다.

> require "dbgtest"

다음 화면과 같이 출력되면 디버그 패키지가 정상적으로 불러들여졌다는 뜻이다.


이제 방금 불러들인 디버그 모듈의 유일한 글루함수인 show() 를 실행시켜 보자.

> dbgtest.show()

화면에 썰렁하기 이를 데 없는 디버깅 화면이 나타날 것이다.


단축키는 기본적으로 델파이의 IDE와 동일하다. 

  F5 : 브레이크 포인트 설정. (줄번호 부분 클릭) 
  F7 : 트레이스 인투. (미구현) 
  F8 : 트레이스 스텝. (Next 버튼)
  F9 : 시작, 또는 다음 브레이크 포인트 까지 실행. (Start, Continue 버튼)
  Ctrl + F2 : 실행 종료. 디버깅 정지. (Stop 버튼) 

적당한 곳에 브레이크 포인트를 걸어주고 "Start" 버튼을 눌러주자. 현재 스탭에서의 지역, 전역변수 및 설정된 와치값이 표시된다.

이 모듈은 태생적인 제약을 몇가지 가지고 있다.

1. 루아 5.1.4 이전버전을 지원하지 않는다.
2. 코루틴의 디버깅이 엉망이다.
3. 지역변수에 설정된 이중테이블값을 와치에서 읽을 수 없다.
4. 화면 구성이 허접하다.

하지만, 어차피 사내 기획자들이 코루틴을 주무르는 것도 아니고... 로컬에서 이중테이블도 어차피 로컬변수 창에서 확인 할 수 있으니 일단은 써먹을 수 있다!!

덧붙여, 루아 컴파일시 설정에 따라 와치가 동작하지 않을 가능성도 있다.
http://www.gpgstudy.com/forum/viewtopic.php?p=120049#120049  (류광님의 답변)

이 부분은 3번 문제도 해결할 겸, 좀 더 맑은정신으로 하루 날잡아 스택을 하나 하나 정성스럽게 옮기는 방식으로 코드를 바꿔보자.

 

달랑 디버거만 구동되면 뭔가 썰렁할 듯 해서 예제코드를 넣어두었습니다. 이 코드가 보기 싫으면 실행파일과 같은 위치에 빈 noname.lua 파일을 넣어두면 됩니다.