Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Aplicação Fechando sem gerar Exceção

Estou desenvolvendo um projeto que tem por finalidade ficar analisando o um log de uma maquina e reportando para um banco de dados o que ele minera desse log. Sei que posso debugar exceções usando o próprio Visual Stuido, contudo meus testes estão sendo feitas a partir do software já publicado e rodando na maquina. A maioria dos bugs consegui resolver a partirdo uso de try e catch na maior parte do código (tanto na thread principal, assim como em minhas classes), gerando um log de falhas ao qual eu me guio para resolução desse bugs. Contudo eu me deparei com o programa fechando e não deixando nenhuma informação no log, o que me dá a entender que alguma coisa está acontecendo fora do contexto principal de meu projéto.

Teria alguma forma de verificar ou de captar informações de fechamento inesperado da aplicação?

2 respostas
solução!

Olá, Luciano! Como vai?

É realmente desafiador quando a aplicação fecha sem gerar nenhuma exceção.

Uma das maneiras de lidar com isso é utilizar o método AppDomain.CurrentDomain.UnhandledException. Este método é acionado quando ocorre uma exceção não tratada no domínio da aplicação. Você pode adicionar um manipulador de eventos para este método e registrar as informações da exceção.

Aqui está um exemplo de como você pode fazer isso:

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    // Resto do seu código
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Exception ex = (Exception)e.ExceptionObject;
    // Aqui você pode logar a exceção em um arquivo ou banco de dados
    Console.WriteLine("MyHandler caught : " + ex.Message);
    Console.WriteLine("Runtime terminating: {0}", e.IsTerminating);
}

Neste exemplo, o método CurrentDomain_UnhandledException será chamado sempre que uma exceção não tratada ocorrer. Você pode adicionar o código para registrar a exceção dentro deste método.

Por favor, note que este método não irá prevenir que a aplicação feche, mas irá fornecer informações sobre a exceção que causou o fechamento.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Aajudou sim. Ajudou muito. Também foi um tapa na minha cara. depois de ter implementado o evento, consegui identificar o problema que ocorria praticamente no inicio do meu fluxo. Um problem de leitura de arquivo. No caso a minha aplicação acabava por acessar um arquivo ao mesmo tempo que outra aplicação. Disso me surgiu mais uma dúvida, que vou deixar pra outro post.

Muito obrigado pela dica.