No ambiente cygwin, o comando linux 'strace' está disponível. strace produz todos os SO < - > interações de aplicativo (nesse caso, aplicativo & quot; cygwin < - > SO), e a chamada específica do sistema ou outra operação em que ele está congelando deve estar aparente.
Para usar strace você simplesmente prefixar o comando strace antes do comando que inicia o aplicativo que você deseja depurar. Por exemplo, se você estiver iniciando o mysql a partir do terminal cygwin usando o comando mysql
, chame-o como strace mysql
.
Se a saída da execução da strace nos programas de congelamento não for aparente, poste a saída para pastebin ou equivalente (não tente adicionar à sua resposta, será uma quantidade enorme de texto).
O próximo passo seria executá-lo com um depurador como o gdb, mas em um caso como esse strace é geralmente suficiente.
Atualizar
Aparentemente existe um bug introduzido no porto de Strace de cygwin nos últimos dois meses; por uma pesquisa no google de 'cygwin strace seg fault'; Eu não estava ciente disso. Como strace é a melhor ferramenta para este trabalho, tente atualizar sua instalação do cygwin para ver se uma correção foi intencionalmente ou inadvertidamente introduzida. Para atualizar sua instalação do cygwin, use a seguinte sequência de comandos:
wget -NP /usr/local/bin/ http://cygwin.com/setup-x86_64.exe
chmod u+x /usr/local/bin/setup-x86_64.exe
/usr/local/bin/setup-x86_64.exe -n
Fonte
Após a atualização, tente novamente. Se ainda houver falhas, as coisas ficarão um pouco confusas, já que o gdb é muito menos fácil de usar, e não há equivalentes reais para strace disponíveis no ambiente cygwin que eu conheço atualmente.
Há sempre a chance de a atualização resolver seus problemas de lançamento, e a strace se torna um ponto discutível (não é uma grande chance ...)
Atualização 2
Se o cygwin strace comandar os segfaults após a atualização, acho que sua melhor opção é usar um depurador de espaço do usuário nativo do Windows, como o logger.exe. Informações de instalação podem ser encontradas aqui .
logger.exe é usado de maneira similar à strace, o problema é que agora você terá traduções dos programas expostos às chamadas do sistema, e não as chamadas reais do sistema. Em outras palavras, ele só estará olhando para o sistema operacional para interações cygwin, e as especificidades do programa ofensivo podem ser ofuscadas. No entanto, um travamento ou congelamento quase sempre pode ser atribuído a uma limitação de recurso ou a uma chamada de sistema que não responde, e esse método exporá isso.
Desde que eu estou oferecendo isso como uma alternativa para algo (strace) que ainda pode funcionar após a atualização, não vou entrar em grande detalhe para o uso específico do mesmo. Basicamente, o que você fará (pós-instalação), é chamar cygwin a partir de um prompt de comando do windows prefixado pelo programa logger.exe, assim como descrevi strace. Um terminal cygwin interativo será aberto e você precisará iniciar o programa que está avaliando a partir dele. Uma enorme quantidade de texto (deve) ser produzida pelo aplicativo logger descrevendo o que o cygwin e seu processo filho "seu programa" estão fazendo. Quando ocorre um travamento, a chamada específica do sistema ou o recurso que está sendo aguardado deve estar aparente. Novamente, se não for, poste o texto completo da saída do registrador.