twitter wide


2004/09/17 05:33

'디버깅과 탐정 놀이' 실제 적용 사례 미스터리 잡담

디버깅과 탐정놀이 300님 트랙백

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

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

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

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

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

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

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




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

덧글

  • hongsup 2004/09/17 09:55 # 답글

    크하하하! 그런데 눈물 없이는 읽을 수 없는 공감 100% 기록 물입니다.
  • Fithelestre 2004/09/18 00:10 # 답글

    오늘 세미나였는데 망했습니다. 그냥 째고 어제 하는 샤이닝이나 볼 걸 그랬다고 목하 후회중입니다. ㅠ.ㅠ
  • 시안 2004/09/18 11:45 # 답글

    남겨주신 덧글 보고 놀러왔습니다. ㅠㅠ 우하하핫! 멋집니다. 불가능한 것들을 하나씩 제거하다 보면 남는 것은 아무리 그지같은 코드라도 돌게 되어 있어! 라니! 음. 프로그램이 저렇게나 추리 소설과 일맥상통할 줄은...
  • Fithelestre 2004/09/18 19:18 # 답글

    시안 // 300님 말씀대로, 프로그램의 잘못된 곳을 고치는 디버깅은 범인을 추리하는 과정과 많이 상통하는 면이 있습니다. ^^
댓글 입력 영역