Code: Select all
LONG WINAPI WriteDumpFile(_EXCEPTION_POINTERS *pException)
{
// 예외 정보가 있으면 함께 남기고, 정보가 없으면 함께 남기지 않는다
if( pException )
{
if( MiniDumpWriteDump( hProcess, dwProcessID, hFile, eDumpType, &sExceptionInfo, &sUserInfo, NULL) )
{
return true;
}
}
else
{
PMINIDUMP_EXCEPTION_INFORMATION ssExceptionInfo;
ssExceptionInfo = NULL;
if( MiniDumpWriteDump( hProcess, dwProcessID, hFile, m_eDumpType, ssExceptionInfo, NULL, NULL) )
{
return true;
}
}
return false
}
예외가 일어나지 않은 경우에도 WriteDumpFile(NULL);과 같은 방식으로 함수를 호출해서 강제로 덤프를 남기는 방식을 사용하고 있었습니다.
문제는, 이게 32비트(Windows XP)에서는 잘 동작하는데, 64비트(Windows Server 2008)에서는 잘 동작하지 않네요.
예외가 일어났을 경우는 덤프파일이 생깁니다만, 예외가 일어나지 않은 상황에서 강제로 덤프를 남기면 파일은 생성되지만 콜스택 정보가 남겨지지 않습니다.
심지어는 Windows Server 2008에서 32비트(Win32)로 빌드하면 제대로 동작하는데, 64비트(x64)로 빌드하면 제대로 동작하지 않네요.
덕분에 일주일간 골머리를 썩고 있습니다 ㅠㅠ
OS는 Windows Server 2008이고 x64를 이용하고 있습니다.
혹시 해결 방법을 아시는 분은 조언 부탁드립니다~~