TN063: Depurando de DLLs de extensão de Internet

Se você tiver escrito uma DLL de extensão servidor da Internet, você pode estar interessado em começá-lo executando sob o depurador, assim você pode rastrear sua execução, definidos pontos de interrupção ou monitor variável valores depois que a extensão é chamada. Levantar o Microsoft Internet Information Server (IIS) e em execução com sua DLL no depurador são um pouco complicado. Você precisará primeiro localizar um servidor tranquilo onde você pode depurar seu DLL num ambiente controlado. Depois de encontrar esse recurso, você pode iniciar a depuração sua DLL.

Por causa das diferenças entre a versão 3.0 e 4.0 do IIS, é importante saber qual versão você usará para depurar seu DLL.

Depuração usando o Internet Information Server (3.0 e anteriores)

Siga estas etapas para depurar uma DLL usando o IIS 3.0 de extensão servidor da Internet:

  1. Pare os serviços de publicação do IIS usando o Gerenciador do IIS ou, interrompendo os serviços com o ícone Serviços do painel de controle do Windows NT Advanced Server. Observe que você deve parar todos os três serviços, mesmo que você está Depurando apenas extensões para a World Wide Web serviço de publicação. Para facilitar as coisas, você pode querer fazer os serviços iniciados "Manualmente" no painel de controle para que você pode evitar essa etapa mais tarde no seu desenvolvimento.

  2. Inicie o Microsoft Visual C++ e clique no comando de Espaço de trabalho fechar no menu arquivo para fechar qualquer aberto espaço de trabalho.

  3. No menu arquivo , clique em Abrir espaço de trabalho para abrir o INETINFO.Programa EXE. Este arquivo está no diretório onde você instalou o Microsoft Internet Information Server.

  4. No menu Project , clique em configuraçõese, em seguida, clique na guia Debug na caixa de diálogo Configurações do projeto.

  5. Com Geral selecionado na caixa categoria , escreva o seguinte na caixa de texto Argumentos de programa:

    -e W3Svc

  6. Escolha DLLs adicionais na lista suspensa categoria . Em seguida, na caixa Nome , especifique o caminho completo e o nome da extensão DLL ou DLLs. Certifique-se de que a caixa de seleção ao lado de cada é marcada.

  7. Clique em OK para fechar a caixa de diálogo Configurações do projeto.

  8. Certifique-se de que o.Arquivo PDB para sua DLL está no mesmo diretório que as DLLs que você pretende Depurar.

Depurando dicas

O IIS pode ser executado como um aplicativo interativo, tornando muito mais fácil de depuração. Para fazer isso, você precisará fazer algumas alterações em seu sistema. Para a conta de usuário que você está indo para executar o servidor sob, você precisará adicionar alguns privilégios.

Para adicionar privilégios, execute o Gerenciador de usuários. (Se você estiver usando o Windows NT 3.51, execute MUSRMGR.EXE. Se você estiver usando o Windows NT 4.0, execute USRMGR.EXE.) Clique em Direitos de usuário no menu políticas . Marque a caixa de verificação Mostrar direitos avançados do usuário . Em seguida selecione actuar como parte do sistema operacional na lista suspensa à direita e adicione a conta de usuário.

Repita esse processo com Gerar auditorias de segurança (também na lista Soltar-para baixo à direita). Certifique-se de que todos os serviços de Internet (WWW, ftp e gopher) estão parados e INETINFO.EXE não estiver em execução (use TLIST para verificar). Faça logoff e logon novamente. Você pode carregar, em seguida, o IIS com a linha de comando:

Inetinfo. exe -e W3Svc

Para carregar o IIS em um depurador (por exemplo, em WinDbg), use a seguinte linha de comando:

WinDbg Inetinfo. exe -e W3Svc

Você está pronto para ir. No Visual C++, aponte para Depurar no menu construir e, em seguida, clique em ir. Esta ação inicia o serviço de publicação WWW, e o depurador estará ciente dos símbolos em sua DLL. Você pode ignorar o aviso que o arquivo não tem informações de depuração.

Quando você fecha o Visual C++, salve o espaço de trabalho de INETINFO.EXE. Dessa forma, você pode evitar precisar reinserir as configurações para a sessão de depuração. Basta Abra o INETINFO.Arquivo de espaço de trabalho MDS quando você estiver pronto para iniciar o depurador novamente.

DLLs em cache

Você pode ajustar a configuração do registro em HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/parâmetros/CacheExtensions para que o servidor reinicializar DLLs cada vez que eles são usados. Se essa configuração for 1, o servidor irá manter DLLs carregadas na memória contanto que possível. Esta é a configuração padrão para o servidor, uma vez que ajuda o servidor a alcançar desempenho máximo e só deve ser alterada se você estiver usando o servidor para depuração. Se você fizer a configuração 0, o servidor irá sempre recarregar DLLs de extensão cada vez que eles são usados.

Forçando ao servidor para recarregar seu DLL é útil quando sua DLL poderá deixar de funcionar ou perturbar qualquer por-instância dados que ele mantém. Ao forçar o servidor para reinicializar a DLL, você pode voltar sua DLL em um estado previsível com pouco esforço. Certifique-se de testar sua DLL usando a configuração normal do CacheExtensions, porém, não para certificar-se de código em sua DLL é completamente dependente desse Estado inicial.

Depuração usando o Internet Information Server (4.0 e posterior)

Existem várias maneiras de criar um ambiente de Depurando seu servidor componentes e DLLs de extensão servidor da Internet quando utilizar o IIS 4.0 ou posterior. Se você estiver usando um depurador capaz de anexar a um processo de Windows NT, você pode usar essa funcionalidade para depurar seu componente ou extensão. Por exemplo, se você está Depurando com o Visual C++, siga estas etapas:

  1. Inicie o processo de iisadmin. Isso pode ser feito na linha de comando com o comando net start iisadmin. Você também pode usar a caixa de diálogo de serviços no painel de controle para iniciar o IIS Admin Service, que terá início o iisadmin.

  2. Inicie o Visual C++. Aponte para Iniciar a depuração no menu de ComCompilação e clique Attach to Process.

  3. Marque a caixa de seleção Mostrar processo de sistema.

  4. Selecione o processo inetinfo na lista e clique em OK.

  5. Inicie o serviço w3svc. Isso pode ser feito na linha de comando com o comando net start w3svc. Você também pode usar a caixa de diálogo Serviços do painel de controle para iniciar o serviço de publicação na World Wide Web.

Se o depurador que estiver usando não pode anexar a um processo de Windows NT, siga estas etapas para estabelecer um ambiente de depuração adequado:

  1. Abrir a caixa de diálogo Serviços do painel de controle.

  2. Selecione o serviço IIS Admin e clique no botão de arranque.

  3. Marque a caixa de seleção Permitir serviço para interagir com o Desktop e clique em OK.

  4. Repita as etapas 2 e 3 para todos os processos que são executados no âmbito do processo de administração do IIS, por exemplo o serviço de publicação na World Wide Web e o serviço de publicação FTP.

  5. Use o Editor do registro (REGEDIT) para adicionar uma subchave denominada Inetinfo. exe à chave HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/CurrentVersion/imagem opções de execução de arquivo.

  6. Adicione a seguinte entrada para essa nova chave:

    Depurador = lt; DebuggerExeName > onde DebuggerExeName é o caminho completo para o depurador estiver usando.

Quando o serviço de publicação na World Wide Web é iniciado, o depurador será igualmente lançado. Agora você pode definir pontos de interrupção apropriados em sua DLL de extensão servidor da Internet.

Você não será capaz de definir pontos de interrupção no código-fonte do componente até que o componente tenha sido carregado na memória. Para fazer isso, inicie o Internet Explorer e exibir a.Página ASP que contém o objeto. Assim que a página for carregada, você deve ser capaz de definir pontos de interrupção em seu componente. Clique em Atualizar para exibir a página novamente e acionar os pontos de interrupção selecionado. Se o componente não pode ser carregado até mesmo uma vez (por exemplo, se a falha ocorre no código de inicialização de componente), você precisará carregar o componente da DLL antes de se iniciar a sessão de depuração. (Consulte o passo 11 abaixo.)

Em alguns casos, pode não ser capaz de usar qualquer um dos dois procedimentos descritos acima. Se você tiver dificuldade para usar qualquer uma dessas estratégias, existe uma terceira abordagem, que tem sido descrita em versões anteriores do IIS. Esta terceira abordagem exige o estabelecimento de privilégios de segurança do Windows NT, bem como fazer alterações no registro. Ele também desativará sua capacidade de executar o IIS como um serviço. Esta abordagem só deve ser usada se as duas estratégias anteriores falharam.

  1. Use o Gerenciador de usuário para a ferramenta de administração de domínios (USRMGR) para adicionar o logon como serviço, actuar como parte do sistema operacionale direitos Gerar auditorias de segurança no computador local para a conta de Windows NT que você usará ao depurar a DLL de extensão servidor da Internet.

  2. Use o utilitário de configuração de COM distribuído (DCOMCNFG) para alterar a identidade do serviço Admin do IIS para a conta de usuário que você usará para depuração.

  3. Use o Editor do registro (REGEDIT) para remover a palavra-chave LocalService de todas as subchaves IISADMIN relacionados sob HKEY_CLASSES_ROOT/AppID. Esta palavra-chave pode ser encontrada nas seguintes subchaves:

    {61738644-F196-11D0-9953-00C04FD919C1} / / WAMREG IIS admin Service

    {9F0BD3A0-EC01-11D0-A6A0-00A0C922E752} / / extensão do IIS Admin Crypto

    {A9E69610-B80D-11D0-B9B9-00A0C922E750} / / o serviço IISADMIN

    A palavra-chave LocalService pode ser encontrada em subchaves adicionais de AppID.

  4. Adicione subchaves LocalServer32 para todas as subchaves IISADMIN relacionados sob o nó CLSID do registro. Isto irá incluir subchaves correspondente a todas as subchaves que você removeu na etapa anterior. Definir o valor padrão destas novas chaves para lt; caminho > \inetinfo.exe -e w3svc. (<path> é normalmente "c:\winnt\system32\inetsrv.").

  5. Interromper os serviços WWW e FTP a partir do Console de gerenciamento Microsoft ou a caixa de diálogo Serviços do painel de controle.

  6. Inicie o Visual C++ e selecione a guia Depurar na caixa de diálogo Configurações do projeto.

  7. Digite o seguinte caminho no campo executável para a sessão de depuração:

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

  8. Digite o seguinte no campo Argumentos de programa:

    -e w3svc

  9. Selecione o Link guia na caixa de diálogo Configurações do projeto.

  10. Digite o nome e o caminho da extensão Internet Server DLL você está Depurando no campo nome do arquivo de saída.

  11. Opcionalmente, adicione o componente DLL para a lista de DLLs adicionais que são carregados antes de inicia o aplicativo. Isso permitirá que você definir pontos de interrupção no código de inicialização do componente.

  12. Clique no botão ir para iniciar a sessão de depuração.

&Notanbsp;  Depois de concluir a sessão de Depurando, você deve inverter as etapas 5 a 1 para restaurar as configurações anteriores e permitir que o IIS seja executado como um serviço.

Técnico anotações por número |nbsp; &Notas técnicas por categoria

Index