Pergunta

Quais são os passos e técnicas para depurar uma aparente jeito devido a um impasse num processo de produção Win32. Ouvi dizer que WinDbg pode ser utilizado para este fim, mas você poderia por favor fornecer dicas claras sobre como isso pode ser feito?

Foi útil?

Solução

Este postar deve começar sobre os diversos options..Check as mensagens marcadas com depuração ..

Outro artigo úteis sobre depuração impasses ..

Outras dicas

Depuração um verdadeiro impasse é realmente tipo de fácil, se você tiver acesso à fonte e um despejo de memória (ou sessão de depuração ao vivo).

Tudo que você faz é olhar para os fios, e encontrar os que estão à espera de algum tipo de recurso compartilhado (por exemplo, pendurado esperando na WaitForSingleObject). De um modo geral a partir daí é uma questão de descobrir qual dois ou mais threads ter trancado um ao outro, e então você apenas tem que descobrir qual deles quebrou a hierarquia de bloqueio.

Se você não pode facilmente descobrir quais tópicos são trancadas, usar o método mostrado na este post aqui para rastrear a cadeia de bloqueio para cada segmento. Quando você entrar em um loop, os fios no circuito são os que estão num impasse.

Se você é muito preguiçoso, você pode instalar o Application Verifier, em seguida, adicione você módulo e selecione apenas "bloqueia" a partir do teste básico. em seguida, você pode executar o aplicativo sob qualquer depurador.
se uma seção impasse crítico acontece-lhe encontrar a razão imediatamente.

O idioma / IDE você está usando?

Na Net que possa ver os fios de um aplicativo: Debug-> Windows-> Threads ou Ctrl + Alt + H

impasses de depuração pode ser complicado. Eu costumo fazer algum tipo de registro e ver onde o log pára. I quer registrar em um arquivo ou para o console de depuração usando OutputDebugString ().

A melhor coisa é começar adicionando declarações madeireiras. Geralmente eu recomendaria apenas em torno dos recursos compartilhados que são Deadlocking mas também adicionando-os no ponto poder geral para situações ou áreas de código que você não estava esperando. A questão do banco de dados stackoverflow.com muito divulgado na verdade acabou por ser log4net! A equipe stackoverflow nunca suspeitou log4net, e somente através da análise de log (ironicamente) mostrou isso. Eu inicialmente renunciar quaisquer ferramentas complicadas por exemplo, WinDgb desde usá-los não é IMHO muito intuitivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top