콘텐츠로 건너뛰기

어제 ansa가 얘기꺼냈던 디버깅과 탐정놀이

어제 방에서 ansa가 김전일과 디버깅 얘기를 꺼냈는데..
부족한 기억력으로 말미암아 얘기를 완성시키지 못했었다.
아쉬움이 남아.. ica의 홈에서 검색해서 퍼왔다.

—————————————————

디버깅 기법을 탐정들의 스타일에 따라 분류해 봤습니다.

– 하드보일드형

모든 문장과 문장 사이에 printf를 추가한다.
어떤 문장이 문제를 일으키는지 끈기 있게 추적한다.
한줄씩 따라가다보면 문제가 되는 문장을 찾을 수 있기 마련이다.

가끔 담배를 피우러 나가는 것을 잊지 않는다.
잠은 사무실에서 아무렇게나 자는 편이 좋다.

– 안락의자형

가만히 앉아서 모니터를 뚫어져라 응시한다.
전혀 움직이지 않고 몇시간이고 코드를 쳐다본다.
가끔 혼자서 뭐라고 중얼중얼 거리기도 하는데 옆사람은 못알아 듣는다.
그러나 갑자기 마구 타이핑을 하더니 버그를 잡아낸다.

다 좋은데 옆에서 보기엔 미친것 같다.

– 완전범죄형

프로그램을 짤 때 부터 애시당초 머리속으로 무척 많은 생각을 한다.
코드 한줄 한줄 마다 모든 부가효과(side effect), 예외상황(exception), 잘못된 입력을 염두에 둔다.
심지어 멀티 슬레드 코드로 사용되는 경우도 생각하고, 에러 리턴 코드도 구조적으로 만든다.

버그없는 코드는 완전범죄만큼이나 불가능 하다.
결국엔 항상 사소한 것에서 문제가 발생한다.

– CSI 과학수사대형

소스 디버거의 브레이크 포인트는 기본이다. 조건부 브레이크-포인트는 물론이요 스택 트레이스를 한다.
퓨리파이어 같은 소프트웨어로 메모리 leakage도 검사한다.
gprof나 VC-profiler로 프로그램의 병목도 찾아낸다. spy++같은 것도 능숙하게 사용한다.

다른 사람보다 항상 제일 늦게 디버깅을 마친다.

– 미스 마플형

엔지니어들이 디버깅하다 안되서 휴게실에 나가 담배를 태운다.
이런저런 문제점들에 대해 논의를 하고 있는데 옆에서 쓰레기통 비우던 아줌마가 말한다.

“그럴땐 대게 클래스 destructor에서 널 포인트를 지우는 바람에 그렇게 되는데…”

– 명탐정 코난형

디버깅을 시작한다.
어려운 코드를 들여다 보니 잠만온다.
일어나면 코드가 디버깅 되어 있다.

옆에서 네이버 지식인을 습격하고 있는 초딩이 의심스럽다.

– 소년탐정 김전일형

버그의 원인이 될만한 모듈을 고립시킨다.
코드를 고치려다 버그가 하나 더 발생한다.
버그가 하나 더 발생한다.
버그가 하나 더 발생한다.
이건 연쇄 버그다.
시스템이 크래쉬 한다.

….어쨌거나 버그는 이 안에 있다.

“어제 ansa가 얘기꺼냈던 디버깅과 탐정놀이”의 8개의 댓글

  1. 기억을 되살려보건데..
    난 안락의자형과 완전범죄형의 중간 쯤 되었던 듯..
    짧은 코드의 경우엔 매우 효율이 좋은데…
    쫌만 길어지면 효율이 엄청 떨어졌던 것으로 기억.

신승훈에 답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다