2019년 3월 10일 일요일

multi thread exception in MFC

-
referrence:
https://stackoverflow.com/questions/2797366/win32-thread-exits-unexpectedly
-
이런 기능이 있었다....
....
 The easiest way to find the problem would be to run your application under a debugger and enable breaking on Win32 Exceptions. Whenever a Win32 Exception is encountered, the application would break into the debugger and you can find out whats going wrong.

If ....
-
이런 것이 처음 나타났다. 하지만, debugger 에도 이것을 처리하는 break체크박스 옵션이 있었다.
네이티브' 프로그램이 -1073741511 (0xc0000139) 코드에서 끝났습니다.

Software.exe': 'C:\WINDOWS\system32\rpcrt4.dll' 로드, 기호가 로드되지 않았습니다.
'Software.exe': 'C:\WINDOWS\system32\version.dll' 로드, 기호가 로드되지 않았습니다.
'Software.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.VC**.DebugMFC_1fc8b3b9a1e18e3b_*.*.50727.762_x-ww_257740a4\mfc**d.dll' 로드, 기호가 로드되었습니다.
'Software.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.VC**.DebugCRT_1fc8b3b9a1e18e3b_*.*.50727.762_x-ww_5490cd9f\msvcr**d.dll' 로드, 기호가 로드되었습니다.
'Software.exe': 'C:\WINDOWS\system32\shlwapi.dll' 로드, 기호가 로드되지 않았습니다.
디버거:: 프로세스 로드 중에 처리되지 않은 비연속적 예외가 Throw되었습니다.
'[1720] Software.exe: 네이티브' 프로그램이 -1073741511 (0xc0000139) 코드에서 끝났습니다.

GetThreadId 라는 함수는 WindowsServer 2003에서만(?), 지원된다고 한다. ....
그래서 안되었던 것이다. 지원되는 OS가 아니라서.. ....
다른 함수를 골라서 사용하기로. .....

거의 찾은 듯하다. .....

    AFX_ISOLATIONAWARE_FUNC(BOOL, ImageList_Destroy, (HIMAGELIST himl), (himl), FALSE)
--------
거의 찾은 듯했으나.... 아니었다. Thread ID 등을 표시하는 것은 이 오류(예외)를 찾는 데에는 전혀 상관없는 삽질이었다. 이것을 고치는 방법은 전혀 다른 곳에 있었다. 기본적으로, 이것은 Multi-Thread _와는 본질적으로 무관한 오류였다.
일단 방법은, 위에서 찾은 Exception (한국어로 예외....) 메뉴를 Visual Studio (Visual C++) IDE에서 찾아서 (디버그(Debug) 메뉴(Menu) >>> 예외...(Exception...) 항목 클릭(click) 하면, 나오는 목록 상자에서 Win32 Exception(예외) 를 찾아서 C0000005 (C로 시작해서 000...이 이어지다가 5로 끝나는 것)을 체크하는 것이었다. 찾아보니, 통신이라든가 .. 와는 전혀 다른 것이었음이 밝혀졌다. Multithread 와는 전혀 관계가 없었다는 (좌절)이었다. 언제나 그렇지만, 어쨌든 찾은 것이 잘 된 것이다. 도움을 받지 않으면 이렇게 헤맨다.

하지만, 아직은 고치지 못한다. 찾아낸 그 부분을 보니, 여전히 어렵다. 다만, 엉뚱한 곳은 아니다. 위치는 찾았지만, 아직도 고치기는 확신이 서지 않을 정도로 어렵다.

-

댓글 없음:

댓글 쓰기