아아... 점점 프로젝트 마감은 다가오고... 책임의 압박은 슬슬 강해지는 이 시점에서... 어쩌다보니 버그 하나를 발견하게 되었습니다. ㅠㅠ 그것도 다들 보는 앞에서 "제대로" 말이지요. ㅠㅠ 그래서 빼도 박도 못하고 제가 디버깅을 맡아서 하게 되었는데... 얼래? 생각보다 이게 간단한 문제가 아닌겁니다. ㅠㅠ

재현성은 확실한데 시간이 1시간쯤 걸려서 아무리 바쁘게 움직여도 하루에 10번 재현하기가 쉽지 않더군요. 디버깅에 쏟은 시간을 따지면... 지난주 금요일부터해서 꼬박 3일간(야근까지 포함)을 투자했는데요, 실제로 버그의 원인은 아주 단순한데 있었습니다. ㅠㅠ 전형적인 커뮤니케이션 오류로 인한 버그라고 할까요? ㅠㅠ

잠시 설명을 하자면... 블럭들을 관리하는 블럭 풀이 있는데 이 블럭 풀은 4바이트짜리 구조체로 이루어져 있습니다. 그리고 그 안에는 A라는 필드가 있는데요, 이 필드 값은 무조건 0이라고 합의 된 상태였습니다. 아니, 합이 된듯한 상태라고 하는게 맞을 것 같습니다. 실제로 안그런 코드가 있었으니... ㅠㅠ

블럭 풀에서 파라미터로 넘어온 블럭과 같은 블럭을 삭제하는 코드는 위의 합의된 내용을 바탕으로 모든 필드가 일치하는 블럭을 찾도록 되어 있었는데요, 블럭 구조체에서 A는 블럭의 속성을 나타내지만, ID로는 사용되지 않는 필드였기 때문에 호출하는 쪽에서 A 필드의 값을 dummy로 넘겨버린거죠. ㅠㅠ

이 Dummy Data 때문에 블럭 풀에서 제거되었어야 할 블럭이 제거되지 않아서 여러 곳에 같은 블럭이 할당되어 사용되었고, 이로 인해 문제가 발생했던 겁니다. ㅠㅠ 아아... 그런데 이런게 왜 내가 테스트할 때 나올까요? ㅠㅠ

문제를 해결하는 코드를 넣고 테스트를 돌린 뒤 새벽 바람을 맞으며 퇴근하는데... 어찌나 씁쓸하던지... 눈물이 앞을 가리더군요. ㅠㅠ 이 문제가 빙산의 일각이 아니길 바라면서 한자 끄적여 봅니다.

다들 좋은 밤 되세요 ㅠㅠ 

+ Recent posts