/*
[Project setting at Debug]

Runtime Library				: Multi Thread Debug
C/C++ ->   	:  ȣ(/Zd)
							  α׷ ͺ̽(/Zi)
							  ϸ ϱ⸦  α׷ ͺ̽(/ZI)
C/C++ -> ȭ				:   (/Od)


[Project setting at Release]

Runtime Library				: Multi Thread
C/C++ ->   	:  ȣ(/Zd)
							  α׷ ͺ̽(/Zi)
							  ϸ ϱ⸦  α׷ ͺ̽(/ZI)
C/C++ -> ȭ				:   (/Od)

-----------------------------------------------------------------------------------------

[α׷  ǻ]
1. Stack walk ϰ  
 - pdb Բ ؾ .
 
2. Mini dump ϰ ϴ 
 - pdb ʿ.
 - dbghelp.dll  ʿ .
 
3. pdb exeϿ Խñ  
 - vs6.0  Project->Setting->Link->Customize ִ Use Program Database 
 Ѵ.(  뷮  Ǳ  õ ʴ´.)
*/


#include "CrashHandler.h"

void ProcResult( LPCTSTR stackWalkLog, LPCTSTR dumpFileName )
{
	printf( stackWalkLog );
}

void call1()
{
	int* a = 0;

	*a = 123;		//    Crash ߻Ѵ.
}

void hahaha()
{
	call1();
}


//////////////////////////////////////////////////////////////////////////////////////
//  CrashHandler ν ù ° 

void main()
{
	//  ù °  : Stack walk log ϰ ϸ TRUE Ѵ.
	//   °  : Mini dump ϰ ϸ    Ѵ.
	//   °  : Crash ߻ Stack Walk log  Mini dump ޾ƺ
	//					ؼ callback Լ Ѵ.
	CrashHandler::Install( TRUE, "Test.dmp", ProcResult );

	__try
	{
		hahaha();
	}
	__except( CrashHandler::HandleException( GetExceptionInformation() ) )
	{
	}
}

/*
CrashHandler Unhandled exception ߻Ͽ  ͸ ä 
մϴ. ,   Crash ߻ϸ  ( ProcResultԼ )
ȣǴ Դϴ.

 Debug Run( F5 ) Ͽ  õϸ VS   ȭ
Ű  Ͱ ȣ , ҿ   մϴ. 
 Ȳ CrashHandler ϰ Ѵٸ    SEH ְ
CrashHandler HandleException  ȣ־ մϴ.
*/


//////////////////////////////////////////////////////////////////////////////////////
//  CrashHandler ν  ° 

void main()
{
	CrashHandler::Install( TRUE, "Test.dmp", ProcResult );

	hahaha();
	
	
	//   α׷ ߰ Exception Handling ϰ  
	//  CrashHandler::Uninstall()  ȣϸ մϴ.
}

/*
Debug Run( F5 ) ƴ Run( Ctrl + F5 ) Ȥ Release ...   
  Install ָ ͸  ֽϴ.
*/