왜 사용하는가?

우선 주 목적으로는 디버깅을 하는 데 사용하겠지만, 어떤 사람이든 프로그램을 짤 때 한번에 에러없이 짜기란 여간 힘든일이 아니다. 설사 자신이 짠 프로그램이 아니라 다른 사람의 프로그램을 실행시킬 때도 마찬가지다.
디버깅 툴로는 대략 다음과 같은 작업을 할 수 있다.

  1. 프로그램의 실행순서 : main 함수부터 실제로 어떤 과정을 거쳐서 프로그램이 수행되는 지 눈으로 보면서 따라갈 수 있다.
  2. 변수 값 확인 : 컴파일은 되지만, 실제로 프로그램 수행이 안되는 경우가 있다. 아주 골치 아픈 경우인데, 그럴 때는 중간중간에 출력문(printf)을 사용해서 일일이 확인해야 한다. 이런 경우 디버깅 툴을 사용하면 손쉽게 알아낼 수 있다.
  3. 그 외 등등…

사용 방법

우선 디버깅 툴을 사용하기 위해서는 아래와 같은 명령이 필요하다.

>gmake debug

그러면 GUI 디버깅 툴이 자동으로 실행된다.
만일 디버깅 툴이 가장 먼저 어셈블러가 나온다면, 별도의 작업이 필요하다.
우선 stm/arena_dev/make/toolset.mak 파일 연다.
그리고 중간 쯤에 아래와 같은 부분이 있을 것이다.

define COMPILE_C
$(if $(LINT_OUTPUT),echo $(LINT_COMMAND) >> $(LINT_OUTPUT)
$(LINT_COMMAND))
$(CC) -cpp -debug-runtime -g $< $(ST20_CFLAGS) $($(basename $@)_CFLAGS) $($(basename $@)_ST20_CFLAGS)\
      $(INCLUDES) $(BASE_INCLUDES) -o $@
endef

위와 같이 -g 옵션을 추가시켜준다. 그리고 저장한 후에 다시 컴파일하고

make debug

를 쳐서 제대로 main 함수에 나오는지 확인한다.
만일 그래도 안나온다면 마지막 방법을 사용해보기 바란다.
아래와 같은 부분에 위와 비슷하게 -g 옵션을 추가해준다.

define LINK_EXECUTABLE
$(if $($(basename $@)_INIT),,$(if $(DVD_LINK_INIT),,$(error entry point for $@ must be specified in $(basename $@)_INIT variable)))
---------$(CC) -cpp -debug-runtime -g $(LIBRARIES) -T $(CONFIG_FILE) \
      $(ST20_LKFLAGS) $(EXTRA_LINK_FLAGS) $($(basename $@)_LKFLAGS) $($(basename $@)_ST20_LKFLAGS) \
      $^ $(OSLIBS) -p $(if $($(basename $@)_INIT),$($(basename $@)_INIT),$(DVD_LINK_INIT)) -o $@
endef
 
define RUN_OBJECT
--------st20run -g $(addprefix -l ,$(CFG_PATH)) -i $(CONFIG_FILE) -t $(TARGET) $(subst _RUN,,$@) \
      $(ST20_RUNARGS) $(ARENA_RUNARGS)
endef

간략한 디버깅 툴 사용법 설명

  1. 우선 마우스 오른쪽 버튼을 눌러 break_point를 정한다. 이는 여기까지 프로그램을 돌리겠다는 의미이다.
  2. 그리고 나서 위의 버튼중에 Step 등 여러가지 버튼을 사용해서 실행을 시킨다.
  3. Step : 한 줄씩 실행한다.
  4. Over : 만일 루프가 있으면 뛰어 넘는다.
  5. Out : 함수를 빠져 나온다.
  6. To : 어디부터 어디까지 범위를 정해 실행한다.

Variable 을 실행하면 그때그때의 변수 값을 확인할 수 있다.

  • computer/digitalarena/디버깅_툴_사용하기.txt
  • Last modified: 3 years ago
  • by likewind