반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Golang
- 긴옵션
- 약어
- 포인터변수
- 구조와 원리
- UNIX Internals
- TiDB
- go
- Preprocessor
- newSQL
- SQLite
- bash
- 함수포인터
- Pointer
- Windows via c/c++
- DBMS 개발
- OS 커널
- kernel
- FreeBSD
- getopts
- 전처리기
- 포인터
- 한빛미디어
- 컴퓨터 강좌
- Programming
- UNIX
- Symbol
- 커널
- TiKV
- DBMS
Archives
- Today
- Total
sonumb
ddd로 디버깅할 때, 실제 실행위치와 화면의 소스코드 라인이 맞지 않을 때 본문
ddd로 디버깅할 때, 실제 실행위치와 화면의 소스코드 라인이 맞지 않을 때
ddd로 디버깅할 때, 현재 실제 디버깅하는 위치와 ddd에서 출력하는 소스코드의 위치가 서로 다를 때가 있다.
문제의 실제 원인은 LOCPATH라는 환경변수 때문이다.
또한 ddd를 실행할 때도 LC_TIME 변수 역시 실행에 영향을 끼치지만, 코드라인의 위치를 다르게 트레이싱하는 문제는 LOCPATH 때문이다.
따라서 환경변수를 LC_ALL=C 로 하여, ddd를 실행하면 모든 문제는 해결되지만, vim이나 다른 프로그램을 이용할 때는 euckr과 같은 다른 언어가 필요하다.
따라서 하나의 언어로 세팅하면, 충돌이 나던가 혹은 사용하기 불편하기 짝이 없는 환경이 된다.
즉, "LANG=ko_KR.euckr && LC_ALL=$LANG"
인 환경과 "LC_ALL=C && ddd"
실행 환경 모두다 필요한 상황..
이를 해결하는 방법은 두가지가 있다.
- 환경변수를 이용
- 소스코드 수정 및 빌드
환경변수 변경
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
반응형