More actions
디버그는 무엇일까?
- 프로그램의 오류를 발견하고, 그 원인을 밝혀내서 고치는 작업
테이블 디버깅
컴퓨터 디버깅
디버거 방식
- 프로그램을 실행할때 디버깅 모드로 컴파일하여 디버거 기능을 포함시켜서 사용하면서 오류에 관한 각종 정보를 수집
디버그 행 방식
- 수집하고 싶은 정보를 출력하기 위한 디버깅용 명령을 미리 프로그램 곳곳에 삽입하여 실행 시키는 방식
기계어 방식
디버깅 노하우
- 새로운 코드를 작성하기 전에 현재 있는 버그들을 잡는다.
- 버그는 오래 되면 될 수록 그거에 관련된 코드에 대한 기억도 희미해지고, 불명확해져서 디버깅하는데 더 많은 시간이 걸리게 된다.
- 한번에 하나씩의 버그를 수정하고 테스트 해본다.
- 과학실험에서도 하나의 인자를 바꿔가면서 실험을 하지 한꺼번에 여러 인자를 바꾸면서 실험하지는 않는다.
- 분할 정복 기법
- 분할정복을 하다가 생길수 있는 부분은 나무만 보게 되고 숲을 보지 못하게 되는 경우가 있다. 주의!
디버깅 용도?
- 버그 잡기
- 다른 사람 소스 이해하기
디버그 마음가짐
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
그렇다면 디버거는 써야 할까? 디버깅을 안 할 수는 없을까?
참고 사이트
DeleteMe) 내일 정모에서 하실건가요??