Categorias
Depurando extensões utilizando DELPHI shell
Este artigo descreve os detalhes de depuração de extensões Shell escritas com Borland Delphi ou C + + Builder.
Introdução
Hoje os ambientes de programação integrada - Borland Delphi e Borland C + + Builder representam pouco convenientes meios para desenvolver extensões Shell do Windows (mais sobre: extensões Shell).
Em contraste com o ambiente de desenvolvimento da Microsoft, onde todo o código da extensão Shell está incorporado no template, produzido com a ajuda de, Delphi e C + + Builder te dão a oportunidade de utilizar semelhantes Template Wizards, ele também fornece um visual simples e mais rápido para o desenvolvimento de extensões Shell, por exemplo, o pacote de componentes (www.shellplus.com).
Em qualquer caso, a questão importante é a depuração de suas extensões Shell. Este artigo foi escrito para ajudar os programadores, que usam o Borland Delphi (C + + Builder) para o desenvolvimento de extensões Shell. Será igualmente útil tanto para aqueles que utilizam a abordagem visual, quanto aqueles, que escrevem extensões Shell "do zero".
Como para qualquer outra depuração DLL você deve especificar o Aplicativo Host para a sua extensão Shell. Sua extensão Shell será carregada no espaço de endereço deste aplicativo. No nosso caso, esse aplicativo é representado pelo Windows Explorer. Vá até o menu Run | Parameters..., pressione o botão Procurar e selecione o arquivo Explorer.exe no diretório do Windows. No entanto, não se apresse em iniciar a depuração, há uma série de nuances significativas em frente.
Você deve incluir todas as informações de depuração necessárias em seu projeto. Para esta finalidade, abra a janela (usando o menu Project | Options...), avance para a guia no grupo e marque o item. Deverá ativar a geração de dados especial para a depuração remota, que são igualmente necessárias para depurar aplicativos COM. Quando você terminar a depuração da sua extensão Shell, não esqueça de desligar de volta esta opção, já que aumenta consideravelmente o tamanho do módulo e cria um ainda maior em tamanho de arquivo com a extensão *. rsm, que armazena todos os símbolos para a depuração remota. Para a conveniência de depuração, também é recomendado marcar a guia do diálogo. Ela permitirá que você se mantenha a par do trabalho interno dos módulos, que não foram incluídos na lista dos módulos do seu projeto.
Você deve também ter em mente a disponibilidade do código fonte de sua extensão Shell para o depurador Delphi. Eles devem estar localizados no diretório atual do Delphi ou o caminho para eles devem ser registrados em Project | Options | Directories/conditionals, item -.
Após a conclusão de todos os ajustes às propriedades do projeto, você deve recriar todo o projeto (através do menu Project | Build ...).
Depurando extensões Shell no Windows XP e Delphi
Se você usa o Windows XP, você deve ter dificuldades com as bibliotecas de depuração DLL. Elas são as seguintes - o depurador Delphi não carrega as informações símbolos de depuração da biblioteca.
Esse erro já foi corrigido para o Delphi 7, mas se você trabalha com as versões anteriores, você pode achar os seguintes conselhos úteis: faça todos os preparativos para a depuração, como descritos acima, em seguida, inicie depuração. Depois que o principal aplicativo tenha sido iniciado, mude para o Delphi e pressione Ctrl + Alt + M. Na abertura da lista de módulos carregados, encontre o seu módulo, clique com o botão direito sobre ela e escolha Reload Symbol Table. Digite o caminho completo para sua DLL na janela, que irá aparecer, e pressione OK. A tabela de símbolos de depuração remota deve ser recarregado e você terá a oportunidade de designar pontos de interrupção e monitorar o trabalho da sua extensão Shell.
Preparando o MS Windows
O portador da funcionalidade Shell é o aplicativo do Windows Explorer. Na tela do computador você pode ver tais objetos como Desktop, Taskbar, e os conteúdos das pastas. Todos esses objetos são suportados pelo aplicativo Windows Explorer, e você pode ver o seu processo no Gerenciador de Tarefas.
O processo vinculado a ela é referido como Explorer.exe. Você também pode ver aqui, que por vezes várias cópias deste processo estão sendo veiculadas. Não se surpreenda - depende das propriedades do Windows, como será demonstrado mais tarde.
Windows Shell descarrega automaticamente uma biblioteca dinâmica interna quando seu contador é igual a zero, mas isso ocorre apenas no termo de um determinado período de tempo. É feito para acelerar o trabalho do ambiente, mas isso não é conveniente enquanto se escreve ou depura extensões Shell dentro dos limites de um sistema operacional - na compilação de uma extensão Shell já registrada, seu arquivo pode aparecer bloqueado para a escrita. Para os sistemas operacionais de versões anteriores ao Windows 2000, você pode reduzir esse período, alimentando as seguintes informações para o cadastro:
HKLM
Software
Microsoft
Windows
CurrentVersion
Explorer
AlwaysUnloadDll
Quando você terminar a depuração da sua extensão Shell, não esqueça de alterar esta opção para desligada, já que tem um efeito negativo na produtividade do Windows.
Em qualquer sistema operacional, é possível aplicar o método a seguir para iniciar a depuração do Windows Shell:
Carregue o projeto para depuração no Delphi.
Escolha "End of Work" no menu "START-UP".
Pressione as teclas CTRL + ALT + DEL simultaneamente e clique em "No" no diálogo "End of work with Windows". No Windows 2000 clique em "Cancelar". Como resultado, o Shell deverá ser descarregado da memória do computador (barra de ferramentas, ícones na área de trabalho e as janelas abertas com o conteúdo das pastas e discos irão desaparecer), mas todos os outros aplicativos serão executados, incluindo o Delphi no seu projeto.
Ajuste todas as propriedades necessárias para a depuração das extensões Shell e inicie o depurador. Shell deverá iniciar normalmente, mas agora ele vai trabalhar sob o controle do depurador.
Depurando extensões Shell no Windows NT/2000/XP você pode configurar o começo de várias cópias do Windows Explorer (separar cópias de barra de ferramentas, para cada janela com o conteúdo das pastas ou discos, etc.) Como resultado você será capaz de depurar as suas extensões Shell sem descarregar a Barra de Ferramentas e Área de Trabalho, que é muito mais conveniente. Para configurar esta oportunidade você deve incluir as seguintes informações para o cadastro:
HKEY_CURRENT_USER \
Software \
Microsoft \
Windows \
CurrentVersion \
Explorer \
DesktopProcess (REG_DWORD) = 1
Para fazer com que o recurso tenha efeito você deve efetuar logoff e depois logon. Quando você tiver terminado a depuração da sua extensão Shell, não se esqueça de alterar esta opção para desligada, uma vez que faz o Windows ficar consideravelmente mais lento.
Depuração de Extensões Shell
Depois que todos os preparativos foram feitos você pode pressionar Run (F9) e começar a depurar sua extensão Shell. Configure pontos de interrupção nos lugares apropriados, use os botões "Program Pause" e "Programa Reset", se necessário. Não existem outras diferenças entre a depuração de extensões Shell e depurar aplicativos regulares do Delphi. Também, não se surpreenda, se quebrar o projeto de depuração irá causar um carregamento automático do Windows Explorer. É o padrão do Windows de reação a erros ao sair de um processo do Explorer. Para acabar com sucesso o processo de depuração você pode tirar vantagem do caminho descrito acima (através Start | Endo of Work).
O Windows Explorer é um aplicativo multi-thread. Para toda extensão Shell em uso ele cria uma thread separada, na qual se trabalha com ele ainda. Portanto não se surpreenda caso, durante o passo-a-passo da depuração, de repente você é atirado para alguma outra área de código, onde você depurou recentemente, e em seguida devolvido ao local inicial. Você pode acompanhar as suas viagens através dos threads na janela Thread status, que pode ser aberto através do menu View | Debug Windows | Threads.
Como você pode ver, a depuração da extensão Shell não é complicada. Desejamos-lhe boa sorte no desenvolvimento de extensões Shell úteis e de sucesso.