Usuário com melhor resposta
Debugar thread

Pergunta
-
Pessoal,
Esta ocorrendo um erro no servidor de produção e que está me tirando o sono.
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.
No log do windows existe o erro abaixo :
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
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 060000Se 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
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
-
-
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 060000Se 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
-