quarta-feira, 14 de agosto de 2013

Depurando melhor

Tem certas mensagens que somente por intervenção divina! como a que apareceu (abaixo), que apresentava apenas uma única pista: tinha a ver com Business Component.

Não é possível converter um objeto do tipo 'GeneXus.Programs.plano_bc' no tipo 'GeneXus.Utils.IGxSilentTrn'.

Pois a transação Plano havia sido marcada como BC. Mas acontece que a interface parou de repente de funcionar e começou a apresentar esse erro estranho, claro que estava mexendo no programa, para ser mais preciso estava depurando erros, mas não ficou nenhuma dica do que estava acontecendo.

Depurador de Erros

Fazia tempo que algo tão inusitado não acontecia. E quando isso ocorre, o que fazer a não ser perder um pouco de tempo com tentativas para solucionar a coisa:
  1. Comentei todo código (não adiantou nada)
  2. Apaguei a tela (não adiantou nada)
  3. Apaguei a variável que referenciava o BC (adiantou!)
Ou seja, o depurador tem suas manhas e melindres, isso já sabemos, mas esse erro ai, nunca tinha visto.   Então, o que ocorreu, por alguma razão a transação causava problema ao ser depurada.

Quando se abre o modo DEBUG no Genexus, o interessante é dar um BUILD (Não precisa de REBUILD), para construir o objeto que se deseja depurar neste modo. Tem até uma janela que mostra os objetos que estão sendo construídos neste modo, fica ao lado direito e se chama DebugGx. É possível inclusive incluir e remover objetos através desta janela.


O que ocorria com o tal Plano_BC que causava o erro era um pequeno detalhe que sempre passava despercebido, o navegador estava aberto com este objeto, então via de regra, ao iniciar o depurador a primeira coisa que se deve fazer, antes mesmo do BUILD é fechar o navegador, e tudo mais que pode estar bloqueando ou mesmo referenciando algum objeto.

Outro detalhe importante é ao término da depuração retornar o Genexus ao modo normal (RELEASE), caso contrário você incorre na possibilidade de enviar para o servidor de produção objetos com debug ligado e nesse caso o mesmo apresentará uma série de mensagens estranhas para os seus usuários.