리눅스 프로그래밍을 하면서 kdeveloper 및 eclipse 기타 응용툴이 더 있을 것이다. K는 자체 콘솔창에 의한 디버깅에 상당히 유용하다. 내가 필요한 정보를 보기에도 상당히 편하다는 장점을 가지고 있다. eclipse는 프로그램에 필요한 플러그인 및 기타 응용툴에서 탁월한 기능을 가지고 있어 실제 프로그래밍을 할때 너무 유용하였다. 하지만 k처럼 콘솔창에 디버깅 또는 ui에서 디버깅 할 때 약간의 불편함이 있다. ( 뭐 편하다고 하는 분들도 물론 있지만, 가끔 죽는 버그가 있다. 자바버전에 대한 문제라고 하는 분들도 있고, 정확히 뭐라 딱 찝어서 말하기는 ... 쩝 )
여기서 디버깅하는 것은 eclipse 기반으로 정의 해볼까 한다. 뭐 지금 사용하고 있으니깐..^-^;; 툴에서 하는 디버깅하는 방법이야 뭐 금방 습득이 가능하다. 하지만, 콘솔에서 정의한 문서들이 많이 있지만, 내 나름데로의 문서가 필요해서 다음과 같이 정리한다.
1. 실행파일에 접근하여 디버깅.
전체::
리눅스 머신에서는 테스트하기 위한 실행 파일이 복잡하게 마구마구 빙빙돌구 있다. 여기서 프로세서를 납치하여 그 프로세스를 가지고 디버깅하는 방법에 대해 정리한다. 기존에 구글에서 gdb디버깅하기 하면 수 많은 문서들이 쏟아져 나온다. 그 내용들을 공부를 하면서 실제로 디버깅을 하고 그에 따르는 방법을 습득하는데 있다.
콘솔에서 다음과 같이 입력하였다. 한글이 깨지는 문제로 다음과 같이 설정하였다. $ export LANG=C $ ps -ef | grep testCode 1000 6230 1 0 17:40 pts/9 00:00:01 ./testCode 1000 7002 6929 0 17:50 pts/11 00:00:00 grep testCode $ gdb -p 6230 testCode 또는 $ gdb testCode . . . . Reading symbols from /usr/lib64/libXext.so.6...done. Loaded symbols for /usr/lib64/libXext.so.6 Reading symbols from /usr/lib64/libX11.so.6...done. Loaded symbols for /usr/lib64/libX11.so.6 Reading symbols from /lib64/libresolv.so.2...done. Loaded symbols for /lib64/libresolv.so.2 Reading symbols from /usr/lib64/libsasl2.so.2...done. Loaded symbols for /usr/lib64/libsasl2.so.2 Reading symbols from /usr/lib64/libicudata.so.38... warning: Lowest section in /usr/lib64/libicudata.so.38 is .hash at 0000000000000158 done. Loaded symbols for /usr/lib64/libicudata.so.38 Reading symbols from /usr/lib64/libXau.so.6...done. Loaded symbols for /usr/lib64/libXau.so.6 Reading symbols from /usr/lib64/libxcb-xlib.so.0...done. Loaded symbols for /usr/lib64/libxcb-xlib.so.0 Reading symbols from /usr/lib64/libxcb.so.1...done. Loaded symbols for /usr/lib64/libxcb.so.1 0x00007fd31fdd7785 in pthread_join () from /lib64/libpthread.so.0 (gdb) ( 만약에 -p 옵션에 프로세스을 붙이지 않으셨다면 어떤 프로세스를 사용해야 되는지 정의해야 한다. ) (gdb) attach 6230 ( 앞에서 프로세스를 붙이지 않았다면 다음과 같이 어떤걸 써야되는지 정의해야 한다.) (gdb) |
여기서 필요한 정보에 대해 breakpoint을 정의 할 수도 있고, 디버깅이 가능한 기본설정을 끝냈다. 여기서 해야 할일이 무엇이 있을까 필요한 정보는 watch로 정의해 데이터를 보면 될 것이고, 확인해야 될 부분에 break을 걸어 그 안에 있는 메모리의 데이터를 확인하는 것이다.
'프로그램언어 > C++' 카테고리의 다른 글
[C++] template (0) | 2009.02.09 |
---|---|
IRC 프로토콜의 이해 (0) | 2009.02.04 |
[ Project Frame Work ] 다음과 같이 작업을 하기 위해 text 정의 (0) | 2008.12.04 |
C++ Operator Overloading Guidelines (0) | 2008.08.20 |
[C++] 참조자와 포인터 ( reference & pointer ) (0) | 2008.08.18 |