전출처 : Fithele > [코멘트]'디버깅과 탐정놀이'

(눈집에 올렸던 글입니다)

디버깅과 탐정놀이  알라딘 링크

나름대로 추가

-셜록 홈즈 형

불가능하다는 것을 제거한다면서 서브루틴 하나씩을 날려가다 보면 언젠가는 도는 코드가 나올 것이라고 생각한다.
허나 아침 일찍 나온 동료가 확인해 보면 놀랍게도 어쨌든 결과는 나온다.


-모스 경감 형

1.일단 아주 조심스럽게 코드를 짠다.
2.돌려보면 버그가 몇개 발견된다.
3.버그 사항을 머릿속에 기억하고, 새 파일을 열어 다시 짠다.
4. 위의 1-3과정을 시간 허락하는 대로 무한반복한다.

5. 완성되면 크로스워드 퍼즐 하나를 추가하는 것도 잊지 않는다.


-시드 핼리 형

반드시 체력충전용 아이템을 쌓아놓고 시작해야 한다. 아니면 손발이 오그라든다(...)
그래도 X나게 얻어터지고 우울 모드에 한번 빠진 다음에야
비로소 모든 것을 바로잡아 돌릴 마음이 생긴다.

(주 : 딕 프랜시스의 시드 핼리는 외팔이 탐정입니다. 건전지 없으면 작동 안하는 기계 왼팔을 달고 살죠.)


-네로 울프 형

아치, 혹은 더 낮은 다른 이름의 꼬붕에게 시킨다.

다른 분들이 추가한 아이디어

- 에르큘 포와로형 (이글루 영원제타님)
이 문제를 풀려면 4시간이 걸린다고 한다.
정말로 4시간만에 해결했다.
프로그램을 돌려보니, 인터페이스가 엄청시리 세련되게 바뀌어져 있다.
물론 버그도 없어졌다.
알고보니 버그 고치는데 30분,
인터페이스가 마음에 안든다고 바꾸는데 3시간 30분이 걸린것.

엘러리퀸, 파일로 반스, 루크 스카이워커, 한 솔로 등

실제 적용 사례

그냥 우스개 소리 같지만, 실제로 당하는 일을 곰곰히 따져보면 인생의 진실이 들어있다고도 할 수 있다. 다음은 내가 이틀 전에 겪은 이야기.

리X스로 유지되는 클러스터 기기에서 MPI 로 돌아갈 job 이 자꾸만 child process를 node에 집어넣지 못한다고 배째고 뻗는 긴급 상황이 발생. 맙소사.

일단 네로 울프형 - 연구실 형님께 물어봤다. 다른 유저로 switch해서 돌려보란다. 돌려 봤다. 안 돈다. 보다 못한 형님께서 자기 계정에 코드를 카피, 돌린다. 안 돈다. 심지어 전지전능한 루트의 권능을 빌어 봐도...

이 상황에서 우선 해봐야 하는 것은 하드보일드 형. PRINT문으로 MPI가 제대로 initialization이 되는지 봤다. 안 된다. 싱글 CPU로 돌려 봤다. 된다. -_-a

"혹시 컴파일러 문제 아닐까요?" 하는 전언이 옆에서 싸이하던 후배에 의해 대두 (미스 마플형) 그것도 일리가 있겠다 싶어 이전 버젼을 돌려 봤다. 죽는다. 황당해져 다 알지도 못하는 컴파일 옵션을 뺐다가 붙였다가, 이리저리 조정해 본다. 여전하다.

그 때 모리 코고로라도 품어봤음직한 의문이 고개를 든다. 근데 다른 사람들은 잘 돌리고 있잖아. 자네도 어제 저녁까지는 아무 일 없었고. 아예 다른 사람의 다른 프로그램을 돌려 봤다. 아.주.잘.돈.다. 환장한다. 혹시 컴 앞에 쓰러져 자다가 나도 모르는 줄을 하나 오타로 추가한 것 아냐? ㅠ.ㅠ (필자는 이런 거 생기면 거의 99프로 못 잡는다. 동기가 없는 범죄를 추적하기 힘든 것처럼) 선배 또한 황당한지 안락의자형으로 전환. 무언가 뜻모를 말을 중얼중얼 대며 생각에 빠진다.

어차피 근본이 미천하여 CSI형은 꿈도 못 꾸는 것. 결국, 여기서 셜록 홈즈 형으로 변신: "불가능한 것들을 하나씩 제거하다 보면 남는 것은 아무리 그지같은 코드라도 돌게 되어 있어." 백업해 놓고 처음엔 Makefile 내의 오브제를 하나씩 날린 끝에 문제를 일으키는 파일을 찾은 다음, 거기서 또한 서브루틴 or 루프 하나씩 날려가며 문제를 일으키는 부분을 찾았다는... 어쨌든 버그는 이 코드 안에 있어! (김전일)

결국 파일 하나를 토막살인낸 끝에 잭더리퍼형이라고 해야 하나 연쇄버그범(?)을 찾아냈다. save. 코드 속도를 빠르게 하기 위해 특정 변수값을 저장하도록 하는 명령인데, 이 명령을 지우니 문제가 해결되었다. 속도를 떨어뜨리겠군, 하고 안그래도 느린 코드를 한탄하고 백업본을 되살리는 작업에 들어갔는데...



사진은 위 내용과 아무런 관계가 없습니다

이 모든 것이 삽질임이 약 30분 후에 밝혀졌다. 마치 추리소설처럼, 범인은 전혀 의외의 인물(?)이었던 것이다. 메.모.리. 변수 크기를 좀 크게 잡았더니 클러스터가 약간 붐비기 시작하자 오바이트를 한 건데 사용자인 나는 아무 말이 없었으므로 몰라줬던 것. 미워 죽겠다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기