MFC
-
프로그램 오류 시 덤프 뜨는 방법(procdump)MFC 2018. 3. 14. 15:09
소스코드에 자동으로 덤프를 뜨게 하는 방법에 대해서 쓴 적이 있다. 그 코드가 콘솔 프로그램에서는 잘 동작하는데, 대화상자 기반 프로그램에서는 덤프가 생성되지 않았다. 여러가지 방법을 찾던 중, 결국 procdump 라는 프로그램으로 오류 발생 시 수동으로 직접 덤프를 생성시키는 방법을 선택했다. 1) 일단 아래 사이트에서 procdump를 다운 받는다. https://docs.microsoft.com/ko-kr/sysinternals/downloads/procdump 2) procdump 를 먼저 시작한다. procdump -e -ma -w xxx.exe 명령어를 실행한다. 3) xxx.exe 프로세스를 실행한다. 4) 생성된 덤프로 오류 상황을 분석한다.
-
문자열 인코딩 변환 매크로 주의사항 (W2A, A2W)MFC 2018. 1. 29. 14:31
유니코드와 멀티바이트 문자열을 상호변환하는데 있어 가장 간편한 것이, 제공되는 함수를 사용하는 것일테다. USES_CONVERSION; 만 사용하면, 여러 변환 매크로들을 사용할 수 있기에 종종 사용했었다. A2W, W2A 같은 매크로들이다. W : 유니코드A : ANSI 문자열 헌데, W2A는 변환과정에서 내부스택을 사용하기 때문에, 반복문 안에서 사용하면 스택오버플로우가 발생한다. 그래서 찾은게 CW2A, CA2W 등 이다. 이는 ATL7.0에 도입된 클래스와 매크로로, 클래스 내부에 128만큼 버퍼를 갖고있고, 이를 넘어서는 경우 힙에 메모리를 할당한다고 하며, 루프 안에서도 사용가능하며 스택오버플로우되지 않는다고 한다. 필자는 for문안에서 다량의 W2A_EX를 사용했고, 또한 반복 횟수가 많아서..
-
-
Release 모드에서 오류 발생 시 자동 덤프 생성에서 분석까지...MFC 2015. 12. 24. 17:25
개발을 하다보면 Release 모드 상태에서 어느 순간 오류가 발생하는 경우가 생길 수 있다. 덤프 생성 및 분석을 위하여 해야할 일은 아래와 같다. 먼저 pdb 및 map 파일이 빌드 시 생성되도록 프로젝트 설정을 바꿔야 한다 1. C/C++ -> 일반 -> 디버그 정보 형식 에서 "프로그램 데이터베이스(/Zi)" 로 바꾼다. 2. C/C++ -> 일반 -> 명령줄 -> 추가옵션 에서 /Zo 를 추가한다 3. C/C++ -> 출력 파일 -> 어셈블러 출력 에서 "어셈블리, 기계어 코드, 소스"로 변경한다 4. 링커 -> 디버깅 -> 디버그 정보 생성 에서 "예" 선택 5. 링커 -> 디버깅 -> 맵 파일 생성 에서 "예" 선택 5. 생성된 dmp 파일을 pdb 파일 exe 파일과 같은 폴더에 넣고 분석..