sexta-feira, 15 de janeiro de 2010

Remote Debugging no Delphi 2010

Esse não é um assunto nada novo, mas sempre que preciso utilizar essa técnica de depuração muitos pequenos detalhes surgem e insistem em tomar um tempo precioso que, quase sempre, não foi previsto ou ultrapassa em muito o esperado.

Assim, dedico esse post para a descrição detalhada do passo-a-passo necessário para a depuração remota sobre o Windows Seven (32 bits) utilizando o Delphi 2010.

Apesar de acreditar que os procedimentos aqui descritos são válidos para versões anteriores e/ou posteriores, as configurações e testes foram realizadas utilizando apenas o Delphi 2010.


Configurações Básicas

Na Máquina Remota

Na máquina remota, ou seja, onde encontra-se o software a ser depurado, é preciso ter o "Remote Debugger" instalado.
A instalação vem inclusa no CD de instalação do RAD Studio 2010 que pode ser acessado através do path "\RemoteDebugger\RemoteDebugger.exe" ou então através do Launcher do RAD Studio (imagem abaixo).


Após a instalação, o remote debugger deverá ser inicializado. Esse é um procedimento que sempre deverá ser feito, caso contrário o IDE do Delphi/RAD Studio não conseguirá conectar-se à máquina remota.

No diretório C:\Program Files\RemoteDebugger (use %ProgramFiles%\RemoteDebugger como path, já que o nome do diretório "Program Files" depende do idioma e da plataforma do sistema opearcional -- 32 ou 64 bits) rode o aplicativo rmtdbg140.exe.

O número 140 no nome do aplicativo refere-se à versão do Delphi, no caso Delphi 2010. Se você tiver utilizando uma outra versão, esse número será diferente (ex: rmtdbt105.exe no Delphi 2007; rmtdbg120.exe no Delphi 2009).

O Tray ico, como mostra a imagem ao lado, informa que o remote debugger está rodando.

Na primeira vez que o aplicativo é executado o Windows Vista/Seven irá apresentar um alerta do Firewall.


Confirme a permissão. Caso contrário o IDE não conseguirá conectar-se na máquina remota.

Uma recomendação é que o aplicativo seja executado com permissões de administrador e com o parâmetro "-listen".
No caso da instalação do remote debugger não for possível ou desaconselhada por se tratar de uma máquina de cliente ou por qualquer outro motivo, há a possibilidade de distribuir apenas os arquivos necessário do remote debugger e fazer a inicialização manualmente.

a) Copiar arquivos
Copie os arquivos listados abaixo, encontrados no diretório de instalação do D2010, de para um diretório qualquer na máquina do cliente (máquina remota).
  bccide.dll
  bordbk140.dll
  bordbk140N.dll
  comp32x.dll
  dcc140.dll
  rmtdbg140.exe

OBS: Se a versão do Delphi que você está utilizando não é a 2010 então o nome dos arquivos podem ser ligueiramente diferentes.

b) Registro das DLLs relevantes:
Em um prompt de comandos, faça o registro das DLLs bordbk140.dll e bordbk124N.dll através dos comados:
  regsvr32 /s bordbk140.dll
  regsvr32 /s bordbk140N.dll

c) Inicialização:
Ainda no prompt de comandos inicialize o aplicativo:
  rmtdbg140 -listen 8000


Na Máquina Local

O projeto do sistema (que gera o arquivo executável) deve ter algumas opções de compilação/link setadas para que a conexão remota posso ocorrer.

Primeiro altere, caso já não esteja setado, o perfil de build (opção Build Configuration) para Debug. Isso habilitará opções padrões específicas e necessárias para depuração.

Além disso habilite a opção "Include remote debug symbols" nas opções de linker, como mostra a image abaixo.

No caso da sua aplicação possuir outros packages (BPLs) ou DLLs sob a forma de projetos, não esqueça de habilitar essas mesmas opções nesses projetos. A menos, é claro, que a depuração não deva ou não necessite abranger desses pacotes/blibliotecas.

Após modificar essas opções no ou nos projetos, rebuild-o(s).

Por padrão, o Delphi sempre inicita a execução/depuração de um processo local. Para iniciar a depuração remota do aplicativo é necessário solicitar explicitamente a intenção. Para isso, vá ao menu Run e selecione a opção "Load Process...".
No lado esquerdo do dialog click na opção "Remote", que indica que o processo é remoto.

Ao clicar na opção, serão apresentados no lado direito da tela quatro opções de configuração.
1) Remote path: Caminho completo onde o executável a ser depurado encontra-se. Não esqueça que esse caminho é relativo à máquina remota;
2) Remote host: Endereço IP da máquina remota;
3) Parameters: Pode ser utilizado para especificar os parâmetros de execução. Caso não haja parâmetros, deixe o campo em branco;
4) Working directory: O diretório de trabalho é opcional e por padrão é sugerido informar o mesmo diretório de localização do aplicativo;

Após isso basta pressionar o botão "Load" e pronto, a depuração será inicializada.

OBS: Na máquina local somente a depuração será realizada. A interação do o aplicativo (clicks com o mouse e entrada de informações) é independente e só pode ser feita na máquina remota. A sugestão aqui é o uso de um aplicativo remote-deskopt (exemplo VNC Client e VNC Server) para a interação remota com o software a ser depurado.

5 comentários:

Anônimo disse...

obs: tiver que colocar o endereço :8000 (porta) pra conseguir executar

Unknown disse...

Não seria "VNC Client" e "VNC Server"?

Fabius Lovato disse...

Você está certo mikemaciel.
Obrigado pela correção.

bjnobre disse...

Ao executar a aplicação (clicando no botão Load) a IDE está realizando o debug do código assembler. Como fazer para executar o debug no código delphi?

bjnobre disse...

O debug está rodando no código assembler. Como configurar o debug para rodar no código delphi?