none
Debugar thread RRS feed

  • Pergunta

  • Pessoal,

    Esta ocorrendo um erro no servidor de produção e que está me tirando o sono.
    No log do windows existe o erro abaixo : 

    EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.3959, P3 45d6968e, P4 app_code.a-vg97ej, P5 0.0.0.0, P6 517ca4f6, P7 31, P8 0, P9 exception, P10 NIL.

    Para identificar onde isso ocorria eu copiei a dll app_code.a-vg97e e abri no disasembler do visual studio e com isso localizei o local que gerava o erro porém, é uma função mega simples com uns replaces e tudo com um .tostring , ou seja, não consigo entender como que algo está gerando erro de NULL EXCEPTION ( pelo menos é isso que eu li que seria o p10 nil ) 

    Minha dúvida é : Quais opções eu tenho para debugar esta função ? 

    eu fiz um try e um catch mas as informações que eu tenho ali não são suficientes para investigar..
    Tem como eu colocar um breakpoint e quando cair no catch eu ter acesso a todas estas informações, la no servidor ?

    Eu já tentei os seguintes métodos mas sem sucesso : 

    - Utilizar o debugdiag : não deu certo porque mesmo caindo em um second chance try, ele não gera um crash para acionar o debugdiag

    - Atachar o visual studio no processo w3wp.exe : não deu certo porque o w3wp recicla toda, hora e desatach o debugador

    - Gerando um full dump pelo debugdiag.  : Primeiro que não sei como só acionar so quando acontecer um second chance exception e colocando para debugar ja no first chance ele gera mil logs e nenhum com o erro que preciso :(

    Tente fazer via code usando AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyHandler mas também não aciona o log quando ocorre uma excessão dentro da thread.

    AFinal.. como posso investigar quando cai nesta thread com todos os valores de tempo de execução ?

    Alguma sugestão ?

    Obrigado

    segunda-feira, 29 de abril de 2013 15:24

Respostas

  • Pessoal,

    após muitos dias que estou me batendo com isso detectei o problema.

    a informação P10 NIL que aparece no erro não se refere a uma exception por valores nulos e sim por LOOPING INFINITO.
    Olhando atentamente em meu código descobri que o try de uma thread acionava um método que chamava denovo o próprio metodo.

    Isso está correto para 99% dos casos porém quando isso era acionado dentro de thread eu não tinha o request.url e por isso um try acionava outro try e entrava em um looping.

    Se alguém algum dia passar por algo parecido, segue como identifiquei : 

    Erro no event viewer : EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.3959, P3 45d6968e, P4 app_code.a-vg97ej, P5 0.0.0.0, P6 517ca4f6, P7 31, P8 0, P9 exception, P10 NIL.

    O que importa disso acima : 

    p4 = classe que gerou o erro

    p7 = identificador do método

    p10 = tipo da excessão

    Como identificar o método com problema : 

    1 - em meu computador clique com o botão direito e procure por app_code.a-vg97ej.dll ( parâmetro p4 do erro ) 

    Se não tiver o visual studio no servidor, copie este arquivo para sua maquina local

    2 - Abra o disasembler em iniciar > programas > microsoft visual studio 2010 > microsoft windows sdk tools > IL disasembler

    3- Clique em file > open 

    4- Abra o arquivo app_code.a-vg97ej.dll

    5- CLique em view > metainfo > show

    6 - Clique em FIND 

    7- Digite 060000 + o código do p7 ( no caso seria 31 ) 

    O resultado fica 06000031

    E aí está o método que gerou o erro !

    OBS : Não sei porque mas em algumas classes que procurei tinha que usa 06000 ao invés de 060000

    Se não localizar o método com 0600031 procure por 06000031 ( tem um 0 a mais depois do 6 ) 

    Este valor 06000 é fixo.. O 31 você precisa substituir pelo número da variável p7 do erro gerado no eventview.


    Esperto ter ajudado.. foram 5 dias atrás deste bendito erro..

    • Marcado como Resposta Rafael Metring segunda-feira, 29 de abril de 2013 22:45
    segunda-feira, 29 de abril de 2013 22:45

Todas as Respostas

  • Olá Rafael,

    Não sei se vai ajudar a resolver o problema, mas da uma olhada

    http://www.israelaece.com/post/Health-Monitoring-no-ASPNET-MVC.aspx

    segunda-feira, 29 de abril de 2013 16:29
    Moderador
  • Creio que não welington,

    Pelo que li, esta não captura erros fora do httpcontext, que é onde as thread são executadas.

    segunda-feira, 29 de abril de 2013 17:30
  • Pessoal,

    após muitos dias que estou me batendo com isso detectei o problema.

    a informação P10 NIL que aparece no erro não se refere a uma exception por valores nulos e sim por LOOPING INFINITO.
    Olhando atentamente em meu código descobri que o try de uma thread acionava um método que chamava denovo o próprio metodo.

    Isso está correto para 99% dos casos porém quando isso era acionado dentro de thread eu não tinha o request.url e por isso um try acionava outro try e entrava em um looping.

    Se alguém algum dia passar por algo parecido, segue como identifiquei : 

    Erro no event viewer : EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.3959, P3 45d6968e, P4 app_code.a-vg97ej, P5 0.0.0.0, P6 517ca4f6, P7 31, P8 0, P9 exception, P10 NIL.

    O que importa disso acima : 

    p4 = classe que gerou o erro

    p7 = identificador do método

    p10 = tipo da excessão

    Como identificar o método com problema : 

    1 - em meu computador clique com o botão direito e procure por app_code.a-vg97ej.dll ( parâmetro p4 do erro ) 

    Se não tiver o visual studio no servidor, copie este arquivo para sua maquina local

    2 - Abra o disasembler em iniciar > programas > microsoft visual studio 2010 > microsoft windows sdk tools > IL disasembler

    3- Clique em file > open 

    4- Abra o arquivo app_code.a-vg97ej.dll

    5- CLique em view > metainfo > show

    6 - Clique em FIND 

    7- Digite 060000 + o código do p7 ( no caso seria 31 ) 

    O resultado fica 06000031

    E aí está o método que gerou o erro !

    OBS : Não sei porque mas em algumas classes que procurei tinha que usa 06000 ao invés de 060000

    Se não localizar o método com 0600031 procure por 06000031 ( tem um 0 a mais depois do 6 ) 

    Este valor 06000 é fixo.. O 31 você precisa substituir pelo número da variável p7 do erro gerado no eventview.


    Esperto ter ajudado.. foram 5 dias atrás deste bendito erro..

    • Marcado como Resposta Rafael Metring segunda-feira, 29 de abril de 2013 22:45
    segunda-feira, 29 de abril de 2013 22:45
  • Que bom que conseguiu :)
    segunda-feira, 29 de abril de 2013 23:35
    Moderador