|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1886 [복사]
안녕하세요. HeuristiC 입니다.
우연찮게 자료를 찾던 중 좋은 사이트를 발견하게 되어 기쁩니다.
일주일에 하나씩 GDB 강좌를 올릴 예정입니다만, 학위논문과 취업 및 프로젝트의 압박으로 잘 지킬수 있을지는 의문입니다.
부족한 점이나 틀린 점이 있을 경우, 또는 좀 더 좋은 방법이 있을 경우에는 지적 바랍니다.
강좌는 GDB 7.3을 기준으로 진행 될 예정입니다.
http://www.gnu.org/s/gdb/download/
에서 받으시면 되겠습니다.
Debugging with gdb
The gnu Source-Level Debugger
Tenth Edition, for gdb version 7.3.50.20110915
Richard Stallman, Roland Pesch, Stan Shebs, et al.
1. GDB란
리차드 스톨만 아저씨의 노트북 위에 있는 해피해킹은 언제나 눈부십니다. 개인적으로는 Poker X 흑축을 더 좋아하는 관계로 그렇게 사용하고 있습니다만, 스톨만 아저씨는 정말 멋집니다.
물론 스톨만 아저씨가 emacs와 GDB를 만들었으니, GDB의 사용은 emacs에서 좀더 보기 편합니다만, 개인적으로는 그냥 ssh가 좋더군요. 리눅스는 콘솔이다라는 생각이 깊히 박혀 있어서 인지 emacs는 별로 좋아하지 않습니다.
사설은 여기까지 하기로 하고, GDB는 디버깅 툴입니다. 그래픽컬한 환경에서 DDD(Data Display Debugger) 등이 있긴 하지만, script를 좋아하는 저로써는 gdb가 더욱 매력적으로 보입니다.
GDB로 무엇을 할 수 있을까요 ? 프로그램을 오류를 판단해낼 수 있습니다. 프로그램의 오류는 크게 syntax error와 semantic error로 분류할 수 있습니다. syntax error의 경우는 컴파일 자체가 되지 않고 gcc가 어디에 문제가 발생했는지 다 알려 주기 때문에, 쉽게 해결 할 수 있습니다. 문제는 논리적인 오류가 발생했을 경우 입니다. 이것을 semantic error라고 하고, 문제점을 추적하기 위해 GDB를 포함한 debugger가 존재합니다. GDB는 대표적으로 breakpoint, watchpoint, tracepoint 등을 오류를 추적하기 위한 방법으로써 제공합니다. stack frame, local variables, registers, 등 기타 여러가지를 간편하게 파악할 수 있습니다.
사실 윈도우 환경에서 간단한 C를 작성해 보신 분이라면 얼마나 쉽게 디버깅을 할 수 있는지 아실 겁니다. visual studio의 간편한 디버깅 환경과 비교하여 상대적으로 GDB는 GUI 환경이 아니기 때문에 진입장벽이 약간은 있습니다. 그러나, GDB는 강력한 스크립트를 제공합니다.
Logging, Breakpoint Command List, User Defined Command List, Non-Stop Mode 등을 지원하고, 한번 만들어 논 break, watch 및 trace까지 파일로 저장하는 기능, 다시 시작할 때 reload하는 기능까지 있습니다.
자신이 만들어 논 다양한 스크립트를 GDB 실행시 또는 특정 프로그램 실행시에 옵션을 바꿔서 자동으로 삽입되도록 하는 기능은 물론, 동작중인 프로세스를 잡아서 (attach) 디버깅이 가능합니다.
논리적인 오류는 segmentation fault와 같이 단순하게 잡아 낼 수 있는 오류를 포함하여, 특정부분에서 오류가 발생하고 수백만 instruction이 실행 된 후 전혀 관계없어 보이는 부분에서 오류가 발생할 수 있습니다. 전반의 경우는 초심자도 몇분이면 찾아내지만, 후자의 경우는 전문가라도 시간을 장담하지 못합니다.
GDB의 매력은 후자의 경우를 trace하는데 편리합니다. 예를 들어 한 함수의 특정 인자가 문제가 있을 수 있다고 판단되면, 여러 기법을 혼합하여 스크립트를 생성하고, 프로그램 실행시 부터 종료까지 타겟의 상태를 파일로 저장해 낼 수 있습니다. gnuplot 과 같은 그래프 생성 툴 등을 이용하면 한눈에 어떻게 변화가 생기는지 파악할 수 있습니다.
다음 강좌부터는 기본적인 부분 (?)은 어느 정도 생략하고, 스크립트 위주로 강좌를 진행 하도록 하겠습니다.
|
Hit : 12141 Date : 2011/10/26 01:35
|