yuchi's Development Home
글 수 201
전에 회사에서 '프로젝트 엡실론' 알파테스트를 세번 하는 동안 유져들로부터 날라온 덤프중에 정말 죽어도 모르겠다 싶은 힙크래시 관련 덤프가 있었다.
맵 로딩중에 힙이 크래시하는 현상이었는데 186번의 주간빌드를 진행하면서 퇴사하는 그 날까지 원인을 밝히지 못했던 딱 한개의 버그였다.
3차 알파가 끝나고 한달이 지날때까지도 그 버그를 잡으려고 별 쇼를 다 했었다. Application Verifier에서 페이지힙 켜놓고 맵 체인지를 3000번씩 시키면서 재현을 시켜보려했지만 사무실에선 결코 재현이 되지 않았다.
꿈에서까지 디버깅을 했지만 결국 그 버그의 원인을 밝혀내지 못했다.
프로젝트는 캔슬되고 퇴사한 지금에서 그 버그의 원인이 뭔지 알았다.
게임레벨을 로딩하고 라이트맵에 비트맵을 써넣는 코드의 버그였다.
정말 사소했다. destination포인터의 타입을 4바이트로 설정해놓고 Pitch값을 그대로 더해버린것. Pitch는 메모리의 옵셋이었는데...
그게 왜 사무실에서 안나왔냐면...텍스쳐 이미지의 Pitch값이 이미지의 Width*Bytes per Pixel과 일치하는 경우는 문제가 생기지 않기 때문이다.
아마 사무실에 있던 장비,os,드라이버에서는 언제나 일치했던 모양이다. 내가 사용했던 장비 포함해서. 다만 동일 장비에서도 드라이버가 상태에 따라 다르게 할당할 수 있는것 같다. 아마도 메모리 align때문인듯.
그 시절 잡았다면 행복감이 더했겠지. 이제는 원인을 알고도 아쉬운 마음 뿐이네.
맵 로딩중에 힙이 크래시하는 현상이었는데 186번의 주간빌드를 진행하면서 퇴사하는 그 날까지 원인을 밝히지 못했던 딱 한개의 버그였다.
3차 알파가 끝나고 한달이 지날때까지도 그 버그를 잡으려고 별 쇼를 다 했었다. Application Verifier에서 페이지힙 켜놓고 맵 체인지를 3000번씩 시키면서 재현을 시켜보려했지만 사무실에선 결코 재현이 되지 않았다.
꿈에서까지 디버깅을 했지만 결국 그 버그의 원인을 밝혀내지 못했다.
프로젝트는 캔슬되고 퇴사한 지금에서 그 버그의 원인이 뭔지 알았다.
게임레벨을 로딩하고 라이트맵에 비트맵을 써넣는 코드의 버그였다.
정말 사소했다. destination포인터의 타입을 4바이트로 설정해놓고 Pitch값을 그대로 더해버린것. Pitch는 메모리의 옵셋이었는데...
그게 왜 사무실에서 안나왔냐면...텍스쳐 이미지의 Pitch값이 이미지의 Width*Bytes per Pixel과 일치하는 경우는 문제가 생기지 않기 때문이다.
아마 사무실에 있던 장비,os,드라이버에서는 언제나 일치했던 모양이다. 내가 사용했던 장비 포함해서. 다만 동일 장비에서도 드라이버가 상태에 따라 다르게 할당할 수 있는것 같다. 아마도 메모리 align때문인듯.
그 시절 잡았다면 행복감이 더했겠지. 이제는 원인을 알고도 아쉬운 마음 뿐이네.