https://cafe.naver.com/3dgamebook/12
책에서 못 다한 이야기 - 이벤트 뷰어로 덤프파일 없이 디버깅 하기
대한민국 모임의 시작, 네이버 카페
cafe.naver.com
이전 회사에서 있었던 일입니다.
사내 테스트용 게임 서버에 크래시가 발생하였는데
아무런 덤프파일이 남지 않고 그냥 강제종료 된 상태였습니다.
덤프파일이 있으면 해당 시점의 콜스택, 메모리등 모든 것을 다 볼 수 있어,
디버깅할 때 덤프파일은 필수로 확보해야 하는 중요한 단서입니다.
하지만 종종 덤프파일 없이 그냥 크래시가 나는 경우도 있습니다.
이럴땐 디버깅 하기 난감한데 pdb파일만 잘 보관해 놓았다면 이벤트 뷰어의 정보로 디버깅이 가능합니다.
원래 서버 코드에는 크래시 발생시 덤프파일을 남기게끔 구현되어 있었습니다.
하지만 이번 크래시는 해당 코드가 수행되기 전에 발생하였기에 덤프파일은 남지 않았습니다.
서버를 실행하면 초반에 설정 파일을 읽어오고, 각종 시스템을 초기화 하는데
이 설정 파일을 읽어오는 도중에 크래시가 발생한 것이었죠.
이 때 유일하게 참조할 수 있는 정보가 이벤트 뷰어 입니다.
윈도우OS에는 이벤트 뷰어라는 프로그램이 내장되어 있는데
이걸 열어보면 어떤 프로그램이 무슨 일을 수행하다가 크래시가 났는지 알 수 있습니다.
물론 이벤트 뷰어에는 메모리 주소만 기록되어 있으므로 정확히 크래시가 발생한 코드를 확인하려면
exe와 pdb파일을 모두 갖고 있어야 합니다.
디버깅 순서는 다음과 같습니다.
1. 크래시 발생
2. 이벤트 뷰어에서 faulting offset address(오류 오프셋) 부분의 메모리 주소를 복사해 놓기
3. 크래시가 발생한 프로그램의 exe파일을 visual studio로 열어서 디버그 모드로 진입, 이후 일시정지 상태로 전환
( || 이렇게 생긴 일시정지 버튼 누름)
4. module 윈도우를 열어 현재 메인 모듈의 base address(기준 주소)를 찾음
5. base address + offset address를 계산하여 최종 주소를 얻음
6. disassembly 윈도우를 열어 방금 계산한 주소를 붙여넣기 함
7. 크래시가 발생한 코드가 disassembly 윈도우에 표시됨
단, exe가 릴리즈 모드인 경우 프로젝트 속성에서 일부 설정을 조절해 줘야 disassembly창에 소스코드가 나타납니다.
1. 디버그 정보 형식 -> /Zi 로 선택

2. pdb파일 생성

유튜브에서도 관련 내용을 찾았습니다.
https://www.youtube.com/watch?v=HkAhFhcLn9Q
'게임개발 > 게임개발 팁' 카테고리의 다른 글
| 나노바나나로 게임 UI 만들기 (1) | 2025.11.22 |
|---|---|
| [유니티] 엔진 버전업 이후 안드로이드 aar관련 빌드 에러 케이스 (0) | 2025.11.05 |
| [유니티] 웹서버에 유니티 웹게임 올리기(content 헤더 설정) (0) | 2025.10.19 |
| 소프트웨어 개발, 외주 개발, 실패하는 이유는 한방에 최종 그림을 받으려 하기 때문 (0) | 2025.09.28 |
| [AWS] 소규모 IT개발에 맞는 서버 구성 (2) | 2025.09.24 |