SlideShare una empresa de Scribd logo
1 de 137
Descargar para leer sin conexión
덤프 파일을 통한 사후 디버깅
실용 테크닉
김이선
veblush@[nexon|gmail]
버블파이터
 BNB     카트라이더      프로토타입      에버플래닛      던전엔파이터     GTR
프로그래머   리드 프로그래머   리드 프로그래머   리드 프로그래머   테크니컬 디렉터   프로그래머




                   게임 프로그래밍 11년차
개발은 곧 디버깅


배포전     배포후
        디버깅
디버깅
개발은 곧 디버깅


배포전     배포후
         배포후
         디버깅
디버깅     디버깅
도입
덤프 파일

특정 상황에서 프로세스의 상태 를
디버깅을 목적으로 파일로 남긴 것
Exception
          System
프로세스 상태   Thread          아니오
          Module
                       Full-
          Memory      Dump?
          …
                          예
6 KB




4804 KB
덤프 파일의 정보를 보기
  >dat i A.dmp
Exception                System                 Module                    Memory
TheadId:   1956        Processor/CPU          Modules(0)                addr: 0012fedc,
Code:      80000003      Arch:     0            Name:       Tests.exe     size: 00000124
Flags:     00000000      Level:    6            Base:       00400000    addr: 0040114f,
Record:    00000000      Revision: 5894         Size:       00006000      size: 00000100
Address:   004011cf      VendorId: Intel        CheckSum:   00006722    addr: 0040114f,
                         Version: 00010676      Stamp:      4f926cc4      size: 00000100
                         Feature: bfebfbff      CV_GUID:    244b5515-   addr: 00501000,
 Thread                  Extended: 6d960e89     CV_AGE:     43            size: 00010000
Thread(id:1956)        OS                       CV_Path:    Tests.pdb   addr: 00520000,
  SCount:   0            Version: 6.1         Modules(1)                  size: 00021000
  PClass:   32           Build:    7601         Name:       ntdll.dll   …
  Priority: 0            Platform: 2            Base:       777e0000
  Stack:    1244892      CSD:      SP1          Size:       0013c000
  EIP:      004011cf                            CheckSum:   00141016
  EBP:      0012ff40                            Stamp:      4ec49b60
Thread(id:2910)                                 CV_GUID:    93d2cd7-
  …                                             CV_AGE:     2
                                                CV_Path:    ntdll.pdb
                                              …
VS IDE 가
온라인 디버깅
처럼 보여줌
미니덤프를 남기고 수집해서
VS IDE 로 디버깅하는 시스템은 필수
편하다!
그런데?
병원에서 디버깅하는 내용을 다룬 드라마
까다로운 경우의 사후 디버깅을
해결하기 위해 했던 작업 소개
덤프 파일과 PDB 연결
 여러 개의 덤프 파일 분석
      콜스택
     힙 메모리
덤프 파일과 PDB 파일의 키
EXE
                  K
     컴파일러
소스
      링커
            PDB
                  K
Minidump


EXE                  DMP
      K                    K
PDB Path
Age
       (UTF-8)
덤프 파일에 맞는 PDB 파일 찾기
K   K



K
Symbol    K   K

         Server


M
                  L   L
    ?


                  M   M
심볼 서버를 사용하고 있지 않다면
  바로 도입하는 것을 추천!
어? 잘 되잖아?
 뭐가 문제?
실행파일 보안 솔루션!
Themida, ASProtect, …
K   K
보안             Minidump


EXE            EXE                  DMP
      K              K                    !
Name:       Tests.exe                             Name:       Tests.exe
Base:       00400000                              Base:       00400000
Size:       00005000                              Size:       00173000
CheckSum:   0000fdf1                              CheckSum:   000b1076
Stamp:      4f936fe3                              Stamp:      4f936fe3
CV_GUID:    152589ac-                             CV_GUID:
CV_AGE:
CV_Path:
            1
            Tests.pdb
                        보안             Minidump   CV_AGE:
                                                  CV_Path:



       EXE                   EXE                        DMP
                K                  K                               !
이를 해결하기 위해
DMP 파일에 원본 EXE 키를 연결하자!

      EXE       DMP
            K         !
                      K
EXE        EXE                DMP
      K             K               !




                                    수집

                        K

          DMP           dat   DMP
                K                   !
DMP → EXE, PDB 연결을 만들어줌
    >dat l -m A.exe A.dmp
?
     EXE           DMP
           K             !



수집된 DMP 가 어떤 EXE 랑 연결되는지?
클라이언트 버전 or 빌드 타임을 사용!
EXE        EXE                   DMP
       T    K        T       K          T    !


EXE                  T
 T’    L                                     수집

EXE                              K
 T”    M
                DMP              dat   DMP
                 T       K              T    !
클라이언트 덤프 수집 단계에
올바른 PDB 연결 단계를 꼭 넣자!
덤프 파일과 PDB 연결
여러 개의 덤프 파일 분석
     콜스택
     힙 메모리
적합한 기준!
게임 내용에 맞춰
문제 시점의 맵, 스킬, 장비, …
대부분 역할을 잘 해줌
   그런데…
그런데 외부 모듈이나
절대 발생할 수 없는 로직에서 문제가
       나타난다면?

혹은 에러를 내는 양상이 매번 바뀐다면?
클라이언트의 경우 실행 환경이 통제되지 않는데

    H/W 결함    바이러스    악성유저

       Driver 결함   악성코드
외부 요인인지 아닌지
잘 판단하는 것이 중요!
EIP 차트   OS   CPU   GPU
EIP 차트   OS   CPU   GPU
환경 편재에 주목!
외부 요인을 추정할 수 있다!
OS    윈도우 9X : OS + 드라이버 불안
          OS Heap 차이, ?

CPU       CPU 자체 보다는
       메인 보드인 경우가 더 많음

GPU     그래픽 카드 드라이버!!!
모듈    외부 프로그램에 의한 영향


     메신저, 보안 솔루션 등의 DLL 이
       게임 프로세스에 연결됨.


     악성 프로그램 DLL 도 마찬가지
CASE STUDY
[던전엔 파이터]
2011 년 상반기
Visual Studio 2003 → 2008
         Migration
2003
                덤프,
                클레임          재배포
                       아니요
 2003    2008

개발      배포            괜찮나?

                             2008
                         예
                             아싸!
VS2008 빌드 버전: 유저의 클레임
“채널을 선택하면 클라이언트가 종료됩니다”
VS2008 빌드 버전: 덤프 리포트
HeapAlloc, HeapFree 수행 중 크래시가 늘어남
HeapAlloc, HeapFree 중에 크래시가 나는 것은
          십중팔구 힙 깨짐
힙 깨짐에 중점을 두고
코드 리뷰 + 트랩 코드 패치
해당 문제를 유발 하는 코드가 없음!
악성 프로그램이 문제의 원인!
문제의 덤프 파일들로부터 모듈 편재 확인
악성DLL   악성DLL
        힙깨짐

                크래시
덤프 보고의 환경 편재를 잘 살펴서
   외부 요인을 잡아내자!
덤프 파일과 PDB 연결
여러 개의 덤프 파일 분석
    콜스택
    힙 메모리
콜스택은?
쓰레드의 현재 함수 호출 상태를 보여줌
Visual Studio 는
어떻게 콜스택을 보여줄까?
코드                              스택
                                ADDR   VALUE   DESC
400h int Func(int x, int y) {
                                104h     10     a
403h   int a = x * y;
40Bh   return a;                108h    118h   EBP
411h }                          10Ch    435h   EIP
                                110h     2
420h void Test() {              114h     5
423h   Func(2, 5);              118h    12Ch   EBP
435h }
                                11Ch    470h   EIP
STACK
  …
 EBP
 EIP
  …
 EBP
 EIP
  …
 EBP
 EIP
  …
ADDR      VALUE     EIP:010E2E13
0020fa58   0020fa64
                      EBP:0020FA58
0020fa5c   010e2e29
0020fa60   004b2ff8
0020fa64   0020fa74
0020fa68   010e2e4d
0020fa6c   00000005
0020fa70   004b2ff8
0020fa74   0020fa88
0020fa78   010e2e6d
0020fa7c   00000002
0020fa80   00000005
ADDR      VALUE     EIP:010E2E13
0020fa58   0020fa64
                      EBP:0020FA58
0020fa5c   010e2e29
0020fa60   004b2ff8
0020fa64   0020fa74
0020fa68   010e2e4d
0020fa6c   00000005
0020fa70   004b2ff8
0020fa74   0020fa88
0020fa78   010e2e6d
0020fa7c   00000002
0020fa80   00000005
콜스택 구성에 필요한 것:
  스택 메모리, EBP, EIP
그 중에 하나만이라도 깨지면?
ADDR      VALUE
0020fa58   0020fa64
                      EBP:0020FA5c
0020fa5c   010e2e29
0020fa60   004b2ff8
0020fa64   0020fa74
0020fa68   010e2e4d
0020fa6c   00000005
0020fa70   004b2ff8
0020fa74   0020fa88
0020fa78   010e2e6d
0020fa7c   00000002
0020fa80   00000005
ADDR      VALUE
             0020fa58   0020fa64
EBP:002BFE64 0020fa5c   010e2e29
             0020fa60   004b2ff8
             0020fa64   0020fa74
             0020fa68   010e2e4d
             0020fa6c   00000005
             0020fa70   004b2ff8
             0020fa74   0020fa88
             0020fa78   010e2e6d
             0020fa7c   00000002
             0020fa80   00000005
ADDR      VALUE
             0020fa58   0020fa64
EBP:002BFE64 0020fa5c   010e2e29
             0020fa60   004b2ff8
             0020fa64   0020fa74
             0020fa68   010e2e4d
             0020fa6c   00000005
             0020fa70   004b2ff8
             0020fa74   0020fa88
             0020fa78   010e2e6d
             0020fa7c   00000002
             0020fa80   00000005
보통의 콜 스택 재구성은
스택, EBP 가 정상일 때만 동작!
스택, EBP 깨졌을 수도 있을 때는
  다른 방법을 사용해보자!
ADDR      VALUE
0020fa58   0020fa64 Func2
0020fa5c   010e2e29
                            1. 스택 메모리에서
0020fa60   004b2ff8          코드 주소 추리기
0020fa64   0020fa74 Func1
0020fa68   010e2e4d
0020fa6c   00000005
0020fa70   004b2ff8
0020fa74   0020fa88
0020fa78   010e2e6d
0020fa7c   00000002 Test4
0020fa80   00000005
ADDR      VALUE
0020fa58   0020fa64
0020fa5c   010e2e29    2. 스택 메모리에서
0020fa60   004b2ff8   스택 주소 영역 추리기
0020fa64   0020fa74
0020fa68   010e2e4d
0020fa6c   00000005
0020fa70   004b2ff8
0020fa74   0020fa88
0020fa78   010e2e6d
0020fa7c   00000002
0020fa80   00000005
ADDR      VALUE
0020fa58   0020fa64
0020fa5c   010e2e29 +Func2   3. 콜 스택 추정
0020fa60   004b2ff8
0020fa64   0020fa74
0020fa68   010e2e4d +Func1
0020fa6c   00000005
0020fa70   004b2ff8
0020fa74   0020fa88
0020fa78   010e2e6d +Test4
0020fa7c   00000002
0020fa80   00000005
예외 쓰레드 콜스택 강제 재구성
     >dat c A.dmp
함수 재구성에 프로그래머의 해석이 필요
하지만 스택 파괴에도 최대한 정보를 제공!
<팁>
함수 스택에 디버그 변수 저장하기
struct Item {
  int id;
  int count;
};
int GetCount(const vector<Item>& items) {
  int count = 0;
  for (i in items) {
    VERIFY(i->count > 0);
    count += i->count;
  }
  return count;
}
int GetCount(const vector<Item>& items) {
  int count = 0;
  for (i in items) {
    int item_id = item.id;
    int item_count = item.count;
    VERIFY(i->count > 0);
    count += i->count;
  }
  return count;
}
그냥 Trace 쓰지 왜?
간단히 덤프 파일로 볼 수 있다면 더 간편해서!
재귀함수 등 콜 스택의 여러 변수를 봐야 한다!
#define DEBUG_VAR(T, var) 
  volatile T& var = *(T*)_alloca(sizeof(T));
int GetCount(const vector<Item>& items) {
  DEBUG_VAR(int, item_id);
  DEBUG_VAR(int, item_count);
  int count = 0;
  for (i in items) {
    item_id = item.id;
    item_count = item.count;
    VERIFY(i->count > 0);
    count += i->count;
  }
  return count;
}
DEBUG_VAR(int, item_id);

DEBUG_VAR(int, item_count);
스택 할당은 비용이 거의 없으므로
    간편하게 써보자!
  (다만 스택 오버플로우는 조심)
덤프 파일과 PDB 연결
여러 개의 덤프 파일 분석
     콜스택
   힙 메모리
덤프에 힙 메모리를 넣으면
디버깅에 많은 도움을 줌
몬스터
class Monster
   : public Object
{
   int id;
   int ai_state;
   int more_over;
   virtual ~Monster();
};
사용
void Move(Monster* m)
{
  if (m->ai_state == 0)
    m->ai_state = 1;
  verify(Route(m));
}
일반
  < 1MB




힙포함
 프로세스
메모리 용량
용량이 크지만 디버깅이 무척 편함

개발버전 클라이언트, 서버, 툴은 적극 사용!
 배포 클라이언트의 경우 선택적으로 사용
풀 덤프만 있으면
이제 이 버그는 제겁니다!
사용
void OnAttack(Monster* m, Player* p)
{
  SetAttackTarget(m, p);
  log(“M:%d – P:%d”, m->id, p->id);
  verify(p->valid());      로그
}                        M:1500 – P:5
                         M:1901 – P:5
모든 객체에 쉽게 접근할 수 없다.
  콜스택 지역 변수에 남았거나,
  전역변수 (싱글턴 등) 로부터!
덤프 파일에 힙 메모리 내용이 다 있으니
   어떻게 해볼 수 있지 않을까?
1500 이 나오는 메모리 주소를 찾아
      Watch 로 살펴보자!




          (Monster*)(0x043BD14-4)
메모리를 다 뒤져서 전부 찾아서 Watch!
덤프 메모리에서 32bit 1500 모두 찾기
     >dat m –f i1500 A.dmp
무식하지만 작동하는 방법!
  좀 더 나아가 보자!
잘못된 주소   올바른 주소
메모리에 있는 객체를 찾아보자?
Object      vftbl       COL         Type

 vftbl       &LOC      signature     vftbl

   id       &::~dtor     offset      data
ai_state       …        cdOffset    name[0]
more_over              pTypeDesc       …
   …                   pClassDesc
메모리에서 모든 객체를 찾아        vftbl 이
                주소를 출력한다.           있는 객체




  Monster 의
vfptr: 0x4102c4      Monster* 타입?
메모리의 모든 Monster 객체를 출력
   >dat o –t Monster A.dmp
찾은 Monster 객체에 대해    sizeof(T)
                                  안에서
       1500 숫자를 가지고 있는 객체만 출력




  Monster 의
vfptr: 0x4102c4
메모리의 모든 Monster 객체 중
32bit 1500 을 가지고 있는 것들 출력
>dat o –t Monster –s 16 –f i1500 A.dmp
힙 메모리에서 객체 찾기 응용
플레이어
class Player
   : public Object
{
   string name;
   int ip_addr;
   int cid;
   virtual ~Player();
};
문자열
class string
{
                    길이가 15
   int   len;      이하면 여기에
   char buf[16];
   char* ptr;
                   16 이상이면
};                  동적할당
힙 메모리에서
이름이 test_player_9000 인
    Player 객체 찾기
길이가 16 이니 string 이 문자열 포인터를 가리킴.
먼저 문자열 주소를 찾자.


문자열 주소 0x00391840 을 포함하고 있는 Player
객체를 찾자.
길이가 16 이니 string 이 문자열 포인터를 가리킴.
먼저 문자열 주소를 찾자.


문자열 주소 0x00391840 을 포함하고 있는 Player
객체를 찾자.
이제 모든 객체를 찾을 수 있어요!
   (vftbl 은 있어야 겠지만…)
정리
덤프는 프로그래머의 친구!
 좀 더 많이 사용해보자!
덤프 분석툴도
틈틈이 만들어 보자!
    >dat
감사합니다!
http://code.google.com/p/dump-analysis-tool/

Más contenido relacionado

La actualidad más candente

Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규ChangKyu Song
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션NHN FORWARD
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화Jaeseung Ha
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 

La actualidad más candente (20)

Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 

Similar a 덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012

[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기진현 조
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁Yi-kwon Hwang
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
android stuff1
android stuff1android stuff1
android stuff1Jin Jiu
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)Covenant Ko
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340Samsung Electronics
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Samsung Electronics
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발cho hyun jong
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2Wooseok Seo
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기Kiheon Park
 

Similar a 덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012 (20)

[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
android stuff1
android stuff1android stuff1
android stuff1
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
 

덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012