sonumb

ddd로 디버깅할 때, 실제 실행위치와 화면의 소스코드 라인이 맞지 않을 때 본문

개발자 이야기

ddd로 디버깅할 때, 실제 실행위치와 화면의 소스코드 라인이 맞지 않을 때

sonumb 2019. 3. 8. 12:08

ddd로 디버깅할 때, 실제 실행위치와 화면의 소스코드 라인이 맞지 않을 때

ddd로 디버깅할 때, 현재 실제 디버깅하는 위치와 ddd에서 출력하는 소스코드의 위치가 서로 다를 때가 있다. 

문제의 실제 원인은 LOCPATH라는 환경변수 때문이다. 

https://www.ibm.com/support/knowledgecenter/ko/ssw_aix_71/com.ibm.aix.nlsgdrf/understand_locale_environ_var.htm

또한 ddd를 실행할 때도 LC_TIME 변수 역시 실행에 영향을 끼치지만, 코드라인의 위치를 다르게 트레이싱하는 문제는 LOCPATH 때문이다.

따라서 환경변수를 LC_ALL=C 로 하여, ddd를 실행하면 모든 문제는 해결되지만, vim이나 다른 프로그램을 이용할 때는 euckr과 같은 다른 언어가 필요하다. 

따라서 하나의 언어로 세팅하면, 충돌이 나던가 혹은 사용하기 불편하기 짝이 없는 환경이 된다.

즉, "LANG=ko_KR.euckr && LC_ALL=$LANG"인 환경과 "LC_ALL=C && ddd" 실행 환경 모두다 필요한 상황..

이를 해결하는 방법은 두가지가 있다.

  1. 환경변수를 이용
  2. 소스코드 수정 및 빌드

환경변수 변경

LOCPATH LC_TIME을 세팅한 상태에서 ddd를 실행한다. (혹은 LC_ALL 하나만 세팅)

$ export LC_TIME=C LOCPATH=/usr/share/locale

참고:
LOCPATH 를 환경파일에 export로 선언하여 실행하면, 다른 프로그램들을 실행하는데 문제가 발생한다.

혹은 alias로 실행한는 방법도 있다.

alias ddd='LC_ALL=C ddd'

실행은 일반적인 실행과 같다.

$ ddd ./myprogram  # 소스코드 위치 제대로 출력됨

DDD 빌드 하기

0. pre-requisition

X Athena widget, XPM 라이브러리 설치

sudo yum install libXaw-devel libXpm-devel

1. 소스 다운로드

2. 소스 수정

ddd/ddd.C 파일

2035 static
2036 ddd_exit_t pre_main_loop(int argc, char *argv[])
2037 {
       //... 
2044   XtSetLanguageProc(NULL, NULL, NULL);
2045   setlocale(LC_ALL, "");  // <<<<< 이것을
2045   setlocale(LC_ALL, "C"); // <<<<< 이렇게 수정

이부분은 gdb console창을 항상 띄우게 수정한 부분이다. 넣는건 사용자 몫.

3960       if (running_shells() == 0 ||
3961           app_data.annotate && running_shells() == 1)
3962         {
3963            gdbOpenCommandWindowCB(gdb_w, 0, 0); // <<< 이 라인 추가 
3964
3965           // We have no shell (yet).  Be sure to popup at least one shell.
3966           if (app_data.annotate)

2. configure, build & install

# 1) configure
$ ./configure --enable-builtin-app-defaults --enable-builtin-vsllib  --with-readline --with-x --with-xpm --with-athena

# 2) build & install
$ make all && sudo make install





반응형