[[TableOfContents]] = 디버그는 무엇일까? = * 프로그램의 오류를 발견하고, 그 원인을 밝혀내서 고치는 작업 == 테이블 디버깅 == == 컴퓨터 디버깅 == === 디버거 방식 === * 프로그램을 실행할때 디버깅 모드로 컴파일하여 디버거 기능을 포함시켜서 사용하면서 오류에 관한 각종 정보를 수집 === 디버그 행 방식 === * 수집하고 싶은 정보를 출력하기 위한 디버깅용 명령을 미리 프로그램 곳곳에 삽입하여 실행 시키는 방식 === 기계어 방식 === = 디버깅 노하우 = * 새로운 코드를 작성하기 전에 현재 있는 버그들을 잡는다. * 버그는 오래 되면 될 수록 그거에 관련된 코드에 대한 기억도 희미해지고, 불명확해져서 디버깅하는데 더 많은 시간이 걸리게 된다. * 한번에 하나씩의 버그를 수정하고 테스트 해본다. * 과학실험에서도 하나의 인자를 바꿔가면서 실험을 하지 한꺼번에 여러 인자를 바꾸면서 실험하지는 않는다. * 분할 정복 기법 - 분할정복을 하다가 생길수 있는 부분은 나무만 보게 되고 숲을 보지 못하게 되는 경우가 있다. 주의! = 디버깅 용도? = * 버그 잡기 * 다른 사람 소스 이해하기 = 디버그 마음가짐 = Ridiculus Simplity 깊게 생각하기 보다 넓게 생각하라. 버그가 있을 리가 없어!라고 생각지 말라. 어디서부터 시작할 지 생각한다. 데이터를 눈에 보이게 만들라. 누군가에게 설명한다 . = 디버깅 소프트웨어를 사용한 디버깅 = == VC++디버거 쓰기 == * Debug || 기능 || 단축키(*->중요도) || 의미 || || Start Debugging, Go || *F5 || 디버깅 모드로 실행, 디버깅 모드 중에 F5를 다음 BreakPoint로 이동함 || ||BreakPoint ||* F9 || 디버깅 모드에서 멈출곳을 지정 || || Stop Debugging || shift + F5 || 디버깅 모드 중단 || || Step Into || F11 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 함수 내부로 들어가서 계속 실행 || || Step Over || F10 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 내부로 안들어가고 실행만 하고 다음 계속 실행|| || Step Out || shift+F11 || Step Into 로 함수안에 들어갔다가 나오고 싶을때 사용 || || Run to Cursor || Ctrl+F10 || 현재 커서가 있는 곳으로 디버깅 지점이 바뀜. 단 이미 지난 곳으로는 안됨 || || Set Next Statement || - || 다음 디버깅 지점을 지정. Run to Cursor에서는 이미 지난곳은 안되지만 여기서는 됨 || * View || 화면(*->중요도) || 용도 || || *Watch Window || 변수값이나 객체의 상태를 봄. 그 값을 변경시킬수도 있음 || || Call Stack Window || 함수 호출 경로를 보여줌 || || Disassembly || 역어셈블리어 코드를 보여줌 || == Eclipse디버거 쓰기 == || 기능 || 단축키(*->중요도) || 의미 || || Debug start || *F11 || 디버깅 모드로 실행 || ||BreakPoint ||* Ctrl + Shift + b || 디버깅 모드에서 멈출곳을 지정 || || Step Into || F5 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 함수 내부로 들어가서 계속 실행 || || Step Over || F6 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 내부로 안들어가고 실행만 하고 다음 계속 실행|| || Run to Return(Step Out) || F7 || 어떤 함수안에 들어갔다가 바로 그 함수를 나오고 싶을때 사용 || || Resume(go)|| F8 || 다음 BreakPoint 지점으로 이동 || * tip : Ctrl + F11 : 실행 == PHP 디버깅 == === 디버그행 방식 === * 디버깅 하고 싶은 곳에 보고 싶은 변수명을 파일로 출력하는 함수를 넣는다. = 반복되는 디버깅 피하기 - DebugJournal = 사실 : 삽질 내용, 그 여정, 실수한 이야기 -> 사고의 과정이 드러나도록! 느낌, 교훈 미래 행동 계획(FAP) 피드백 = Thread = 그렇다면 디버거는 써야 할까? 디버깅을 안 할 수는 없을까? = 참고 사이트 = * [http://wiki.kldp.org/wiki.php/HowToBeAProgrammer?action=highlight&value=%B5%F0%B9%F6%B1%EB#s-2.1.1 kldp_HowToBeAProgrammer] * [http://korean.joelonsoftware.com/Articles/PainlessBugTracking.html 조엘아저씨의 손쉬운 버그 추적법] Upload:Debug_2004.ppt DeleteMe) 내일 정모에서 하실건가요?? ---- [세미나/2004], [새싹배움터05] [http://zeropage.org/~namsangboy/Score.zip Debugging/Seminar2005자료소스]