Troubleshooting2010. 11. 17. 23:37
일주일 전쯤...
게임 실행중 알 수 없는 문제로 크래쉬가 발생했다. 100%재현이 안되고 특정 컴터에서만 발생하는 것도 아니었다.
어떻게 재현해야할까 고민하는 중에 내 PC에서 동일하게 보이는 문제로 크래쉬 발생!!
하지만 콜스택은 이미 깨져버린지 오래되었는지, assert가 여러번 누적 되어있었다. assert의 파일명 변수의 값은 파일명이 아니라 이상한 메모리를 참조하고 있는것이 아닌가?
VS의 Ctrl+Alt+E(How To: Break When an Exception is Thrown)도 소용없었고, Application Verifier(고객지원|댜운로드)도 First chance에서 잡아내진 못했다. 사운드 프로그램 담당자에게 부탁해 빠알리 마일즈쪽에 문의 메일을 보내라고 했다...
이것이 내가 잘못한 부분이다. 문제가 되는 부분은 찾았지만, 문제를 어떻게 해결할지는 생각하지 않았다. 간헐적으로 터지는 문제라 다른 더 중요한 크래쉬들을 해결하면서 이 문제를 잊어버렸다.

마감이 임박해지자 이 문제의크래쉬가 계속 터지는 것이다;;; 마일즈 쪽에서의 답은 없고, 마냥 기다릴 수도 없는 상황이었다. 울팀의 실력 좋은 sonee가 자기 이슈를 모두 처리하고 다른 사람들 여럿과 같이 플레이하여 이 사운드 문제를 잡아버렸다. 혼자 조용히 해결해 버리는 나 같은 스타일과는 다르게 그리고 빠르게 문제를 해결했다.

우선, 문제의 원인은 동시에 처리 가능한 사운드의 수였다. 64개를 넘어가는 상황이었고, 이때 버퍼 오버런이 된 것이라 조심히 추측해본다.

해결과정은 간단하지는 않았다. 사운드 재생 요청마다 어떤 파일에 대한 것인지 로그를 남기자 그 유명한 하이젠버그가 발생했다. 아무리 테스트를해도 크래쉬가 발생하지 않는 것이었다ㅋㅋㅋ 이사님께서 "한번 요청오면 백번으로 요청해봐" 라고 하셨다. ㅋㅋ정말 괜찮은 방법 아닌가?! 물론 백번대신 열번으로 요청했었다. 동시간대에 재생된 사운드의 수를 세아려봤고, 64개라고 가정한 뒤에는, 64개 초과 요청이 문제라는 것을 밝히는데 전력을 다했다. 그리곤 현재 재생중인 사운드의 카운트를 얻어와서 64개 초과 요청에 대해서는 무시를 했고, 그렇게 이 골치 아팠던 문제는 해결되었다.

재현이 잘 안되는 버그는 재현 횟수를 늘리면된다. 두명이서 플레이하면 같은 시간동안 혼자로 플레이 하는 것보다 두배로 태스트 할 수 있다. 그리고 혼자 보다는 여럿이 도움이 된다. 단 사공은 하나야하겠지...

'Troubleshooting' 카테고리의 다른 글

Conversion from VS2005 to VS2010  (0) 2010.12.14
Break when an exception is  (0) 2010.12.03
intrin.h errors  (0) 2010.10.28
using namespace std;  (0) 2010.10.27
#include <windows.h>  (0) 2010.10.26
Posted by codevania