afxwin1.inl 파일은 ASSERT를 계속 걸어 핸들 혹은 다이아로그를 확인한다고 한다.
// afxwin1.inl
...
#ifdef _AFXWIN_INLINE
// Global helper functions
_AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
{ return afxCurrentWinApp; }
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL);
return afxCurrentResourceHandle; }
_AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)
{ ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }
_AFXWIN_INLINE LPCTSTR AFXAPI AfxGetAppName()
{ ASSERT(afxCurrentAppName != NULL); return afxCurrentAppName; }
_AFXWIN_INLINE COleMessageFilter* AFXAPI AfxOleGetMessageFilter()
{ ASSERT_VALID(AfxGetThread()); return AfxGetThread()->m_pMessageFilter; }
_AFXWIN_INLINE CWnd* AFXAPI AfxGetMainWnd()
{ CWinThread* pThread = AfxGetThread();
return pThread != NULL ? pThread->GetMainWnd() : NULL; }
...
발생 상황)
- 빌드 컴퓨터에서 빌드된 실행파일을 실행 컴퓨터로 옮겨서 실행중이었다.
- GetCurrentDirectory 함수를 사용하고 난 후 발생했다.
갑자기 잘 실행되던 mfc 프로그램에 에러가 발생했다.
중단, 다시 시도 버튼을 누르면 프로그램이 종료된다.
무시를 누르면 프로그램이 정상작동한다.
에러 상황)
- mfc140ud.dll 파일은 존재한다. 파일이 없으면 실행 자체가 안된다고 한다.
- 디버그 모드에서만 발생한다고 한다. 그럼에도 지나칠 수 없었다.
- ASSERT 에러로 윈도우 핸들이나 다이아로그 포인터를 사용할 수 없을 때 발생한다고 한다.
너무 두루뭉술하다.
어쩔 수 없이 실행 컴퓨터에 프로젝트를 옮기고 콜스택을 확인하기로 했다.
콜스택이 비어있다. 그래서 중단점으로 체크했다.
원인)
- 리소스 파일에서 읽어오던 아이콘 파일을 가져올 수 없어 발생한 에러였다.
경로를 탐색하는 함수를 사용한 이후로 문제가 생긴 것 같다.
아이콘을 가져오는 로직도 GetCurrentDirectory 함수를 사용하여 수정했다.
6시간을 헤맸다.
서버 개발자인데 응용프로그램에 이러고 있으니 현타가 온다.
'Study > 에러 정리' 카테고리의 다른 글
NestJS) EC2 -> crypto is not defined (0) | 2025.02.07 |
---|---|
Powershell) Server ping check with timestamp (0) | 2025.01.15 |
node.js <-> MySQL <-> AWS RDS Deadlock (0) | 2025.01.02 |
mfc - iocp 통신 메모리 누수 (0) | 2024.12.23 |
더미클라이언트 테스트, 패킷 지연처리 (0) | 2024.09.11 |