TN063: 인터넷 확장 Dll 디버깅

인터넷 서버 확장 DLL을 작성 하는 경우 디버거에서 실행 하는 확장 호출 후 실행, 중단점 설정된 또는 모니터 변수 값 추적할 수 있도록 그것을 얻는 데 관심이 있을 수도 있습니다. Microsoft 인터넷 정보 서버 (IIS) 일어나 고 디버거에서 DLL 실행 조금 까다롭습니다. 먼저 조용한 서버 제어 설정에서 DLL을 디버깅할 수 있습니다 찾이 필요가 있을 것 이다. 이러한 리소스를 발견 했습니다 일단 DLL 디버깅 것을 시작할 수 있습니다.

때문에 버전 3.0 및 4.0 IIS의 차이, 그것은 DLL을 디버깅 하려면 사용 하는 어떤 버전을 알고 하는 것이 중요。

디버깅을 사용 하 여 인터넷 정보 서버 (3.0 및 이전)

인터넷 서버 확장 IIS 3.0을 사용 하 여 DLL을 디버깅 하려면 다음이 단계를 수행 합니다.:

  1. IIS 관리자를 사용 하 여 또는 Windows NT 고급 서버 제어판에서 서비스 아이콘을 사용 하 여 서비스를 중단 하 여 IIS 게시 서비스를 중지 합니다. Note만 World Wide Web 게시 서비스에 대 한 확장을 디버깅 하는 경우에 모든 세 가지 서비스를 중지 해야 합니다. "수동으로" 귀하의 개발의 뒷부분에 나오는이 단계를 피할 수 있도록 제어판에서 시작 하는 서비스를 확인 하려는 것 들을 쉽게。

  2. Microsoft Visual c + +를 시작 하 고 모든 열려 있는 작업 영역을 닫고 파일 메뉴에서 닫기 작업 영역 명령을 클릭합니다。

  3. 파일 메뉴에서 INETINFO를 열려면 열기 작업 영역 을 클릭 합니다.EXE 프로그램입니다. 이 파일은 Microsoft 인터넷 정보 서버를 설치한 디렉토리에。

  4. 프로젝트 메뉴에서 설정을 누른 프로젝트 설정 대화 상자에서 디버그 탭을 클릭 합니다.

  5. 일반 범주 상자에 선택 된 프로그램 인수 텍스트 상자에 다음을 입력:

    -e W3Svc

  6. 추가 Dll 범주 드롭다운 목록에서 선택 합니다. 그런 다음 로컬 이름 상자에 전체 경로 이름을 지정 합니다 확장 DLL 또는 Dll. 각 옆에 확인란 표시 되어 있는지 확인。

  7. 프로젝트 설정 대화 상자를 닫으려면 확인 을 클릭。

  8. 있는지 확인 합니다.디버깅 하려면 Dll과 동일한 디렉터리에 DLL에 대 한 PDB 파일。

디버깅 팁

IIS는 대화형 응용 프로그램으로 실행할 수 있습니다 훨씬 쉽게 디버깅. 이렇게 하려면 시스템에 대 한 몇 가지 변경을 해야 합니다. 서버에서 실행 하려고 하는 사용자 계정에 대 한 몇 가지 권한을 추가 해야。

권한을 추가 하려면 사용자 관리자를 실행 합니다. (Windows NT 3.51을 사용 하는 경우 실행 MUSRMGR.EXE입니다. Windows NT 4.0을 사용 하는 경우 USRMGR 실행 합니다.EXE입니다.) 정책 메뉴에서 사용자 권한 을 클릭 합니다. 고급 사용자 권한 표시 확인란을 선택 합니다. 그런 다음 오른쪽의 드롭다운 목록에서 운영 체제의 일부로 활동 을 선택 하 고 사용자 계정 추가。

(또한 오른쪽에 드롭 다운 목록)에 있는 보안 감사 생성 이 프로세스를 반복 합니다. 모든 인터넷 서비스 (WWW, ftp 및 gopher) 중지 되었는지 확인 하 고 INETINFO.EXE 실행 되지 않는 (TLIST를 사용 하 여 체크). 로그 오프 하 고 다시 로그온 합니다. 그런 다음 명령줄에서 IIS를 로드할 수 있습니다.:

INetInfo.Exe-e W3Svc

IIS에서 (예를 들어, WinDbg)에서 디버거를 로드 하려면 다음 명령줄을 사용 하 여:

WinDbg INetInfo.Exe-e W3Svc

갈 준비가 되었습니다. Visual c + +에서 빌드 메뉴에서 디버그 를 가리킨 및 다음 이동을 클릭 합니다. WWW 게시 서비스를 시작 하는이 작업 하 고 디버거는 DLL의 기호를 인식 하 고 있을 것입니다. 파일 정보를 디버깅 하지 않습니다 경고를 무시할 수 있습니다.

Visual c + +를 닫을 때 INETINFO에 대 한 작업 영역을 저장 합니다.EXE입니다. 그런 식으로 디버깅 세션에 대 한 설정을 피할 수 있습니다. 그냥 INETINFO를 엽니다.디버거를 다시 시작할 준비가 되 면 데이터 시트 작업 영역 파일。

캐시 된 Dll

HKEY_LOCAL_MACHINE/시스템/CurrentControlSet/Services/W3SVC/매개 변수/CacheExtensions 때마다 사용 되는 Dll을 다시 초기화 하는 서버에서 레지스트리 설정을 조정할 수 있습니다. 이 설정이 1 이면 서버는 가능한 한 오랫동안 메모리에 로드 된 Dll 유지 됩니다. 이것은 서버에 대 한 기본 설정은 이후 최대 성능을 제공 하는 서버를 통해 서버를 사용 하 여 디버깅 하는 경우에 변경 해야 합니다. 만약 당신이 설정이 0, 서버는 항상 로드 확장 Dll 사용 하는 때마다。

DLL을 다시 로드 하도록 서버를 강제로 DLL을 충돌 하거나 인스턴스별 데이터 유지를 화나게 수 있습니다 때 유용 합니다. DLL을 다시 초기화 하려면 서버 강제로, 작은 노력으로 예측 가능한 상태로 DLL을 다시 얻을 수 있습니다. 그러나 정상적인 CacheExtensions 설정을 사용 하 여 DLL, 있는지 DLL의 코드 않습니다 완전히 그 초기 상태에 의존을 테스트 해야 합니다.

디버깅을 사용 하 여 Internet Information Server (4.0 및 이후)

여러 가지 방법으로 IIS 4.0 이상을 사용 하 여 서버 구성 요소와 인터넷 서버 확장 Dll 디버깅 하기 위한 환경을 설정할 수 있습니다. Windows NT 프로세스에 연결할 수 있는 디버거를 사용 하는 구성 요소 또는 확장을 디버깅 하려면이 기능을 사용할 수 있습니다. 예를 들어, Visual c + + 디버깅 하는 경우 다음 단계를 수행:

  1. Iisadmin 프로세스를 시작 합니다. 이 명령은 net start iisadmin을 사용 하 여 명령줄에서 수행할 수 있습니다. 제어판에서 서비스 대화 상자를 사용 하 여 iisadmin을 시작 하는 IIS Admin 서비스를 시작 하려면 수 또한。

  2. Visual c + +를 시작 합니다. 프로세스에 연결을 클릭 하 고 빌드 메뉴에서 디버깅 시작 을 가리킵니다。

  3. 시스템 프로세스 표시 확인란을 선택 합니다.

  4. 목록에서 inetinfo 프로세스를 선택 하 고 확인 을 클릭。

  5. W3svc 서비스를 시작 합니다. 이 net start w3svc명령을 사용 하 여 명령줄에서 수행할 수 있습니다. 제어판에서 서비스 대화 상자를 사용 하 여 World Wide Web 게시 서비스를 시작할 수 있습니다 또한。

적절 한 디버깅 환경을 설정 하려면 다음 단계를 수행 하는 디버거를 사용 하는 Windows NT 프로세스에 연결할 수 없는 경우:

  1. 제어판에서 서비스 대화 상자를 엽니다。

  2. IIS Admin service를 선택 하 고 시작 버튼을 클릭。

  3. 데스크톱 상호 작용 허용 서비스 확인란을 선택 하 고 확인 을 클릭。

  4. 2 단계와 단계 3을 반복 하는 모든 프로세스에 대 한 IIS Admin 프로세스에서 실행 하는 예: FTP 게시 서비스 및 World Wide Web 게시 서비스。

  5. 레지스트리 편집기 (REGEDIT)를 사용 하 여 HKEY_LOCAL_MACHINE/소프트웨어/Microsoft/WindowsNT/CurrentVersion/이미지 파일 실행 옵션 키에 Inetinfo.Exe 라는 하위 키 추가。

  6. 이 새 키에 다음 항목을 추가:

    디버거 lt; = DebuggerExeName > Debuggerexename는 디버거 전체 경로 사용 하는。

World Wide Web 게시 서비스가 시작 될 때 디버거를 시작할 수 있습니다. 이제 인터넷 서버 확장 DLL에에서 적절 한 중단점을 설정할 수 있습니다.

구성 요소를 메모리에 로드 될 때까지 구성 요소의 소스 코드에 중단점을 설정할 수 없습니다. 이렇게 하려면 Internet Explorer 및 보기를 시작 합니다.개체가 포함 된 ASP 페이지입니다. 페이지가 로드 되 자 마자 귀하의 구성 요소에 중단점을 설정할 수 있어야 합니다. 다시 페이지를 보려면 새로 고침 을 클릭 하 고 선택한 중단점을 트리거. 경우 (예를 들어, 오류가 발생 하는 경우 구성 요소 시작 코드에) 구성 요소를 한 번도 로드할 수 없습니다, 디버깅 세션을 시작 하기 전에 구성 요소 DLL을 로드 해야 합니다. (아래 11 단계 참조).

경우에 따라 위에서 설명한 두 절차 중 하나를 사용 하지 못할 수 있습니다. 이러한 전략 중 하나를 사용 하 여 문제가 있는 경우 iis 이전 릴리스에서 설명한 세 번째 접근 방식이입니다. 이 세 번째 방법을 Windows NT 보안 권한을 설정으로 레지스트리를 변경 해야 합니다. 그것은 또한 서비스로 IIS를 실행 하는 기능을 억제할 것 이다. 이 방법은 이전의 두 가지 전략 실패 하는 경우에 사용 해야。

  1. 도메인 관리 도구 (USRMGR)에 대 한 사용자 관리자를 사용 하 여 인터넷 서버 확장 DLL을 디버깅할 때 사용할 Windows NT 계정에 로컬 컴퓨터의 서비스로 로그온, 운영 체제의 일부로 활동및 보안 감사 생성 권한을 추가합니다。

  2. Distributed COM 구성 유틸리티 (DCOMCNFG)를 사용 하 여 디버깅에 사용할 사용자 계정에 IIS 관리 서비스의 id를 변경。

  3. 레지스트리 편집기 (REGEDIT)를 사용 하 여 모든 IISADMIN 관련 하위 HKEY_CLASSES_ROOT/Appid에서에서 LocalService 키워드를 제거 합니다. 이 키워드는 다음 하위 키에서 찾을 수 있습니다.:

    {61738644-F196-11D0-9953-00C04FD919C1} / / WAMREG IIS admin 서비스

    {9F0BD3A0-EC01-11D0-A6A0-00A0C922E752} / / IIS Admin Crypto 확장

    {A9E69610-B80D-11D0-B9B9-00A0C922E750} / / IISADMIN 서비스

    LocalService 키워드는 Appid의 추가 하위 키에서 찾을 수 있습니다.

  4. 레지스트리의 CLSID 노드 아래 IISADMIN에 관련 된 모든 하위 키에 LocalServer32 하위 키를 추가 합니다. 이것은 이전 단계에서 제거할 하위 키의 모든 해당 하위 키가 포함 됩니다. 이러한 새 키 lt 기본값 설정; 경로 > \inetinfo.exe-e w3svc. (<path>는 일반적으로 "c:\winnt\system32\inetsrv".)

  5. Microsoft Management Console에서 또는 제어판의 서비스 대화 상자에서 WWW 및 FTP 서비스를 중지。

  6. Visual c + +를 시작 하 고 프로젝트 설정 대화 상자에서 디버그 탭을 선택。

  7. 디버그 세션에 사용할 실행 파일 필드에서 다음 경로 입력 합니다.:

    C:\WINNT\System32\Inetsrv\Inetinfo.exe

  8. 프로그램 인수 필드에 다음을 입력:

    -e w3svc

  9. 프로젝트 설정 대화 상자에서 링크 탭을 선택。

  10. 이름 및 인터넷 서버 확장 DLL 디버깅 출력 파일 이름 필드에 경로 입력 합니다.

  11. 필요한 경우 응용 프로그램이 시작 되기 전에 로드 되는 추가 Dll 목록 구성 요소 DLL을 추가 합니다. 이렇게 하면 구성 요소 시작 코드에 중단점을 설정 하려면。

  12. 디버깅 세션을 시작 하려면 이동 단추를 클릭。

메모nbsp;??디버깅 세션을 완료 한 후 이전 설정을 복원 하 고 IIS가 서비스로 실행 되도록 허용 하려면 1 통해 5 단계를 반전 해야 합니다(&N).

기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)

Index