DLLHOST.EXE에서 발생하는 Heap Corruption Troubleshooting을 위한 자료 수집 방법

1. 도스 커맨드 창으로 Windows 설치 폴더 아래에 System32 폴더로 이동한 후 DLLHOST.EXE를 확인 하시고 이를 DLLHOST_DEBUG.EXE 이름을 파일로 복사합니다.

 

2. 구성 요소 서비스 MMC를 실행하시고 왼쪽의 트리에서 콘솔 루트 -> 구성 요소 서비스 -> 컴퓨터 -> 내 컴퓨터 -> COM+ 응용 프로그램 에서 현재 고객님의 문제 모듈이 서비스 되고 있는 프로세스를 확인 합니다.

 

3. “COM+ 응용 프로그램”을 선택 후 위의 툴바의 표시된 버튼을 누르시면 서비스의 상태와 실행 중인 PID를 확인 할 수 있습니다. 이중에서 2번에서 확인 하신 응용프로그램을 선택 합니다.

 

4. 선택된 응용프로그램에서 오른쪽 마우스 버튼을 누르고 컨텍스트 메뉴에서 속성을 선택 합니다.

 

5. 등록 정보 다이얼로그에서 아래 그림과 같이 “고급” 탭을 선택하시면 아래쪽에 디버깅 관련 설정을 할 수 있습니다.

기본적으로 디버거에서 실행 체크박스는 선택되어 있지 않은 상태이며 체크 박스를 선택하셔서 입력 창이 할성화 되도록 합니다.

 

6. 입력창의 기본 내용은 아래와 비슷한 내용이 됩니다. 입력창의 내용을 복사하여 Notepade와 같은 에디터로 복사 하신 후 설정값을 변경해야 합니다.

아래의 과정을 통해서 디버깅이 활성화 되며 실제 디버거가 아닌 특정 DLLHOST.EXE 만을 확인 하기 용이하도록 해 줍니다.

다음 내용은 입력 창의 기본내용입니다.

"C:\Program Files\Common Files\Microsoft Shared\VS7Debug\vs7jit.exe" C:\WINDOWS\system32\dllhost.exe /ProcessID:{3D14228D-FBE1-11D0-995D-00C04FD919C1}

위의 내용을 아래와 같이 변경해 주신 후 “확인” 또는 “적용” 버튼을 클릭 합니다.

C:\WINDOWS\system32\DLLHOST_DEBUG.exe /ProcessID:{3D14228D-FBE1-11D0-995D-00C04FD919C1}

 

7. 속성 창을 닫고 DLLHOST_DEBUG.EXE에 대해서 Full PageHeap을 설정 합니다.

예)

      Gflags.exe /enable DLLHOST_DEBUG.EXE /full

      또는

      Pageheap /enable DLLHOST_DEBUG.EXE /full

8. “IISRESET”을 입력하여 IIS 를 재시동하고 IIS관련 프로세스들이 바뀐 속성으로 실행되고 있는지 TLIST 또는 Task Manager에서 확인 합니다.

즉, DLLHOST.EXE와 함께 DLLHOST_DEBUG.EXE가 실행되고 있는지 확인 하면 됩니다.

 

9. 문제 재현 시 Full UserDump가 생성되도록 다음의 명령을 입력 합니다.

cscript.exe adplus.vbs -crash –FullOnFirst -pn DLLHOST_BUG.EXE

10. 자료 수집이 완료되면 다음 명령을 도스 창에서 입력 하여 Pageheap을 Disable 합니다.

예)

      Gflags.exe /disable DLLHOST_DEBUG.EXE

      또는

      Pageheap / disable DLLHOST_DEBUG.EXE

11. DLLHOST.EXE 와 DLLHOST_DEBUG.EXE는 동일한 파일이기 때문에 성능상의 문제는 없습니다. 문제 해결 후 6번 항목에서 설명하는 “디버거에서 실행” Checkbox만 선택을 해제 하고 IISRESET을 실행 하면 됩니다.