Sem diálogo de falha quando um programa trava no Cygwin no Windows 7

3

Quando, no Windows 7, eu inicio um programa de console que deve travar, tenho os seguintes casos:

  • Se eu clicar duas vezes nele, ele cai e um diálogo pop-up "seu programa caiu" é aberto
  • Se eu iniciá-lo através de um console DOS , ele trava e uma caixa de diálogo de diálogo "seu programa caiu" é aberta
  • Se eu iniciá-lo através de um console Cygwin , ele cai silenciosamente. Nenhuma caixa de diálogo pop-up

Note que no Windows XP, tudo funciona como esperado (uma caixa de diálogo é aberta ...), e eu posso depurar o programa com falha.

Isso é um bug do cygwin no Windows 7? Um problema de configuração?

Dados diversos

  • Meu Cygwin é 1.7.5, mas foi reproduzido com um Cygwin 1.7.7.
  • Funciona no WinXP, mas falha no Cygwin no Windows 7 (32 ou 64 bits)
  • A caixa de diálogo é interessante para fins de desenvolvimento / depuração

Eu escrevi o seguinte programa C ++ no Visual Studio 2008, na depuração (32 bits ou 64 bits têm o mesmo resultado):

#include <cstdio>
#include <windows.h>

int main()
{
   printf("It should crash now...") ;
   ::DebugBreak() ;
   return 0 ;
}

O ::DebugBreak() foi substituído por int * p = NULL ; *p = 42 ; (que supostamente falha com uma exceção de violação de acesso), com exatamente os resultados corrigidos no Cygwin.

Obrigado!

    
por paercebal 08.10.2010 / 15:57

1 resposta

4

Eu observei o mesmo problema com versões recentes do Cygwin. Ainda não sei o que está causando isso, mas a função Windows SetErrorMode parece funcionar:

{
  const UINT oldErrorMode = ::SetErrorMode(0);
  ::DebugBreak();
  ::SetErrorMode(oldErrorMode);
}

Apenas uma dica: se você estiver usando o MSVC, use a função intrínseca __debugbreak (). Ele coloca a quebra nesse ponto no código, em vez de dentro de uma função chamada a partir daí. Algumas montagens inline podem fazer esse truque em outros compiladores.

    
por 30.11.2010 / 11:16