E D R , A S I H C RSS

Debugging

1. 디버그는 무엇일까?

  • 프로그램의 오류를 발견하고, 그 원인을 밝혀내서 고치는 작업

1.1. 테이블 디버깅

1.2. 컴퓨터 디버깅

1.2.1. 디버거 방식

  • 프로그램을 실행할때 디버깅 모드로 컴파일하여 디버거 기능을 포함시켜서 사용하면서 오류에 관한 각종 정보를 수집

1.2.2. 디버그 행 방식

  • 수집하고 싶은 정보를 출력하기 위한 디버깅용 명령을 미리 프로그램 곳곳에 삽입하여 실행 시키는 방식

1.2.3. 기계어 방식


2. 디버깅 노하우

  • 새로운 코드를 작성하기 전에 현재 있는 버그들을 잡는다.
    • 버그는 오래 되면 될 수록 그거에 관련된 코드에 대한 기억도 희미해지고, 불명확해져서 디버깅하는데 더 많은 시간이 걸리게 된다.
  • 한번에 하나씩의 버그를 수정하고 테스트 해본다.
    • 과학실험에서도 하나의 인자를 바꿔가면서 실험을 하지 한꺼번에 여러 인자를 바꾸면서 실험하지는 않는다.
  • 분할 정복 기법
    - 분할정복을 하다가 생길수 있는 부분은 나무만 보게 되고 숲을 보지 못하게 되는 경우가 있다. 주의!

3. 디버깅 용도?

  • 버그 잡기
  • 다른 사람 소스 이해하기

4. 디버그 마음가짐

Ridiculus Simplity
깊게 생각하기 보다 넓게 생각하라.
버그가 있을 리가 없어!라고 생각지 말라.
어디서부터 시작할 지 생각한다.
데이터를 눈에 보이게 만들라.
누군가에게 설명한다

.

5. 디버깅 소프트웨어를 사용한 디버깅

5.1. 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 역어셈블리어 코드를 보여줌

5.2. 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 : 실행

5.3. PHP 디버깅

5.3.1. 디버그행 방식

  • 디버깅 하고 싶은 곳에 보고 싶은 변수명을 파일로 출력하는 함수를 넣는다.

6. 반복되는 디버깅 피하기 - DebugJournal

사실 : 삽질 내용, 그 여정, 실수한 이야기 -> 사고의 과정이 드러나도록!
느낌, 교훈
미래 행동 계획(FAP)
피드백

7. Thread

그렇다면 디버거는 써야 할까? 디버깅을 안 할 수는 없을까?

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1020 sec