Pergunta

Qualquer falharam instruções Assert no Windows fazer com que o abaixo mensagem de depuração para aparecer e congelar a execução aplicações. Sei que este comportamento é esperado, mas ele está sendo executado periodicamente em uma máquina sem cabeça assim evitar que os testes de unidade de falha, em vez de espera na entrada do usuário por tempo indeterminado.

Existe é uma chave do registro ou compilador bandeira posso usar para impedir que esta caixa de mensagem a solicitar a entrada do usuário enquanto ainda permitindo que o teste falhar sob ASSERT?

Basicamente, eu quero fazer isso sem modificar qualquer código, apenas mudando compilador ou opções do Windows.

Obrigado!

Microsoft Visual C ++ Debug Biblioteca ASSERT http : //img519.imageshack.us/img519/853/snapshotbu1.png

Foi útil?

Solução

De MSDN sobre a macro ASSERT:

Em um aplicativo MFC ISAPI, uma afirmação no modo de depuração irá abrir uma caixa de diálogo modal (caixas de diálogo ASSERT estão agora modal por padrão); isso irá interromper ou pendurar a execução. Para suprimir modal afirmação diálogos, adicione as seguintes linhas ao seu arquivo fonte do projeto (projectname.cpp):

// For custom assert and trace handling with WebDbg
#ifdef _DEBUG
CDebugReportHook g_ReportHook;
#endif

Depois de ter feito isso, você pode usar a ferramenta WebDbg (WebDbg.exe) para ver as afirmações.

Outras dicas

Eu acho que este é um diálogo mostrada por _CrtDbgReport para relatórios do tipo _CRT_ASSERT. Com _CrtSetReportHook, você pode adaptar o comportamento de toda a sua aplicação. (Ou seja, requer uma mudança de local) Em particular, você pode continuar a execução depois de uma afirmação que falhou, assim, ignorando-o.

Em um contexto de teste de unidade, muitas vezes é bom para converter ASSERTs (chamadas realmente _CrtDbgReport) em alguma exceção, tipicamente um std :: exceção, que contém algum texto informativo. Isso tende a serpenteiam pelo seu caminho para fora para o log de saída do teste de unidade como um fracasso. Isso é apenas o que você quer:. A falha ASSERT deve ser um teste de unidade falhou

Do que jogando em sua função de relatório do gancho, conforme especificado usando: _CrtSetReportHook()

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