사실 게임프로그래머들 중에 release 빌드, 즉 최적화된 코드, 에서 디버깅하는 사람들이 많습니다. 이유는 뭐.. 당연히 debug빌드가 졸라 느린 경우가 있기 때문이지요.
근데 그럴때마다 watch 창에서 로컬변수들 보면 다 깨져나왔죠? ???? 로 나오거나 아니면 아예 잘못된 넘으로 나오던가요. 이걸 해결하려고 디스어셈블리보면서 register에 들어있는 메모리주소를 watch 창에서 casting해서 보는 경우도 있지요. 근데 디스어셈블리 보는게 꽤 귀찮은 짓인건 맞아요..
근데 이게 Visual C++ 2012부터 지원해주더라구요. 사실 공식적인 지원은 아닙니다. 그냥 내부적으로 마이크로소프트사에서 만들어서 다른 용도로 쓰고 있던 걸 누가 찾아낸 것 뿐이거든요. 공식적으로 문서화 되어있는 스위치도 아닙니다. 하지만 현재 VC2012하고 2013에서 다 돕니다. 잘 돕니다.
자 그럼 어케 하냐.... 컴파일러에 이 스위치 하나 넣어주면 됩니다.
/d2Zi+
이 스위치 하나 넣어주시면 됩니다.
실험결과 exe파일은 전혀 손대지 않습니다. pdb파일만 좀 바뀝니다. 고로 그냥 release빌드에서 켜주셔도 아무 문제가 없을것 같습니다.
p.s. 귀찮아서 스샷 생략합니다. 이거 찾아내신 분의 블로그에서 그냥 보세요 ㅎㅎ
끝.
포프
2013년 11월 22일 금요일
2011년 6월 20일 월요일
난 assert() 대신 int 3를 쓴다.
물론 C 언어에서 제공하는 assert() 함수가 있다. 하지만 난 이걸 사용하지 않는다. 이 함수가 제공하는 callstack 꼬라지가 맘에 안들어서... -_- assert()에 실패한 코드라인이 callstack 젤 위에 등장해야 하는데 도무지 그러지가 않으니까.. 물론 callstack을 적당히 조작해서 assert()에 실패한 라인을 젤 위에 나오게 하는 꽁수도 있으나.. 매우 복잡해서 생락.... 대신 난 다음과 같은 ASSERT() 매크로를 만들어 사용한다.
#define ASSERT(expr, ...) if(!(expr)) __asm{ int 3 }
이 매크로가 하는일은 ASSERT에 실패할 때 그냥 코드 실행을 중지(break)하는 것... 이걸 사용하는 예는 다음과 같다.
ASSERT( life == sucks, "인생이 x같지 않다니 말이 되냐!?");
위의 문자열 메시지는 프로그래머가 코드 읽는데 도움이 되라고 있는 것.. 위 ASSERT()가 실패하면 디버거 에서 저 코드라인이 등장하니 그냥 문자열을 읽는 것만으로도 뭐가 문제인지 알수 있다.
이 방법은 하드웨어 인터럽트를 사용하므로.. PC에서만 돈다.. PowerPC 계열의 CPU에서 돌릴려면 다음과 같이 해야한단다.
#define ASSERT(expr, ...) if(!(expr)) asm{trap}
즐 코딩?
2010년 7월 24일 토요일
이것 저것: 컴퓨터 게임 그래픽의 미래
지난 몇주간 보고 들은 게임에 관련된 흥미로운 뉴스들:
- Crytek이 게임그래픽의 미래라는 제목의 프리젠테이션을 올렸습니다: CryEngine 3에서 이미 Sparse Voxel Octree 테크닉을 사용중이라는군요. 2 년전쯤에 Id 소프트웨어의 존 카멕 아저씨도 이 테크닉에 대해 논한적 있죠??
- Hansoft 6.1이 출시되었답니다: 스크럼 프로젝트를 할 때 잠깐 이 프로그램을 쓸 기회가 있었는데 정말 괜찮은 프로젝트 관리 프로그램입니다. 제 생각엔 현존하는 프로그램중 최고인듯...
- Lagoa Multiphysics 물리 엔진의 티저 비디오가 떴습니다: 게임에도 쓸 수 있다고 하긴 하는데 자세한 정보가 없는 지금으로써는 그다지 믿음이 안가네요. 그래도 관심있게 지켜보고 있겠습니다.
- Autodesk사가 Beast 만든 회사를 샀습니다: Autodesk사는 몇년간 게임업계에서 입지를 높이기 위해 많은 회사를 사들였는데요 이 Beast 만든 회사를 산 건 똑똑한 것 같네요. (최소한 Autodesk사의 AI 미들웨어보단 났겠죠.) Mirror's Edge가 이 Beast 테크놀로지를 이용해서 Global Illumination을 처리한건 아시죠?
- Nvidia Parallel Insight 출시: 뭐 이것저것 다 할 수 있다고 하는데요. 특히 제 관심을 끄는 것은 Visual Studio안에서 쉐이더를 디버깅 할 수 있다는 것이네요. 아직 사용해보진 않았지만 꽤 유용해 보이는데요? 조만간 사용할 날이 있겠지요. ^^
피드 구독하기:
글 (Atom)