정확한 버그의 원인을 알아내는 것은 꽤나 성가신 일이지만, 여기에도 몇가지 테크닉이 있다.
표준출력으로 프린트하여 - 프로그램이 간단한 경우, 몇몇 변수들의 값을 프린트해보고, 어떤 값인지 본다 - 무엇이 잘못되었는지 찾기
디버거를 이용하기. 디버거는 breakpoint를 설정하고, 실행도중에 코드를 추적해볼 수 있도록 해준다. 대부분의 IDE는 디버거가 같이 있다. GNU 시스템의 경우, gdb가 있다.
컴파일러에서 지원하는 옵션들을 사용하여 보다 많은 경고(warning)을 볼 수 있도록 해라. 예를들어 g++의 경우, -Wall 옵션을 사용해라.
디버깅에 도움이 되는 사이트 :
Unix 환경에서 C, C++ 디버깅하기 http://www.liacs.nl/~jdassen/onderwijs/stuva/debug/debug.html
MPatrol - 유용한 메모리 디버깅 툴 : http://www.cbmamiga.demon.co.uk/mpatrol
NJAMD - 역시 유용한 메모리 디버깅 툴 : http://sourceforge.net/projects/njamd/
LeakTracer - 메모리 릭을 찾는 간단하면서도 유용한 툴 : http://www.andreasen.org/LeakTracer/
C++이나 C 프로그램을 디버깅하려면 23절 의 파일을 인클루드하고, 'Makefile'에 DEBUG_STR, DEBUG_PRT , DEBUG&_MEM을 디파인 해서 debug.h 의 함수들로 추적할 수 있도록 한다. '-DDEBUG_STR' 등을 없앨 때, 디버깅 함수들은 ((void)0) (NULL을 의미)으로 세팅될 것이다. 따라서 최종 결과물에는 아무런 영향을 주지 않는다. 이 디버깅 함수들은 프로그램에 다양하게 적용될 수 있을 것이고, 결과물의 크기를 증가시키지는 않을 것이다.
debug 루틴의 구현을 위해서는 23절 를 참조해라.
또한, 23절 에서 debug.h 와 디버깅 함수들을 이용한 예제 프로그램을 보아라.
23절 의 예를 보라.