A discussão foi encerrada com o código 0 (0x0) sem exceção não tratada


93

Durante a depuração de meu aplicativo C #, notei uma grande quantidade de ocorrências da seguinte frase:

O segmento - saiu com o código 0 (0x0).

O aplicativo continua a funcionar e nenhuma exceção é detectada / solta.

O aplicativo está sendo executado no Windows 7 64 bits e depurado com a plataforma x86.


1
Tem certeza de que esses são seus tópicos? Se sim, você não espera que eles terminem?
SLaks

Respostas:


137

Esta é apenas uma mensagem de depuração. Você pode desligar isso clicando com o botão direito na janela de saída e desmarcando Thread Exit Messages.

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

Além de programar a partir do seu aplicativo, a janela Saída pode exibir as informações sobre:

  • Módulos que o depurador carregou ou descarregou.

  • Exceções que são lançadas.

  • Processos que saem.

  • Tópicos que saem.


10

Bem, um aplicativo pode ter muitos threads em execução em paralelo. Alguns são executados por você, o codificador, alguns são executados por classes de framework (especialmente se você estiver em um ambiente de GUI).

Quando um thread termina sua tarefa, ele sai e deixa de existir. Não há nada de alarmante nisso e você não deve se importar.


Os tópicos que discuti não são meus (ou não pertencem ao meu aplicativo). No entanto, meu aplicativo precisa se conectar a um servidor Linux AIX que retorna com uma grande quantidade de processos extintos. Não tenho uma ideia clara sobre o funcionamento deste servidor (e quais são suas tarefas), mas suponho que os threads mencionados anteriormente podem afetar o comportamento do servidor.
Gionata

Bem, talvez os threads realmente afetem seu aplicativo, mas a mensagem que você recebe diz que eles foram encerrados com sucesso. Portanto, você pode tentar descobrir por que eles são executados (menu Debug => windows => threads), mas isso é normal quando eles terminam.
Kek

Eles terminam normalmente, mas os processos extintos do servidor Linux podem ser um efeito colateral dos threads de estrutura .net. Talvez o aplicativo tenha vários erros de programação na implementação de multithreading. É possível?
Gionata de

Eu não sei. Este servidor linuw está rodando .NET? usando Mono? Qual é o seu problema na verdade? Os processos extintos?
Kek,

Sim, os processos dufunct fazendo travar o servidor Linux.
Gionata de

7

Para completar a resposta aceita do BlueM, você pode desativá-la aqui:

Ferramentas> Opções> Depuração> Configurações gerais de saída> Mensagens de saída de thread: Desativado


4
A resposta aceita do BlueM na verdade tem uma solução mais simples: "Você pode desligar isso clicando com o botão direito na janela de saída e desmarcar a mensagem de thread encerrada"
Simon MᶜKenzie

5

se o seu aplicativo usa threads direta ou indiretamente (ou seja, nos bastidores, como em uma biblioteca de terceiros), é absolutamente comum que as threads sejam encerradas após serem concluídas ... que é basicamente o que você descreve ... o depurador mostra esta mensagem ... você pode configurar o depurador para não exibir esta mensagem se você não quiser ...

Se o acima exposto não ajudar, forneça mais detalhes, pois não tenho certeza de qual é exatamente o seu problema ...


1

O framework cria threads para suportar cada janela que você cria, por exemplo, como quando você cria um Form e .Show () ele. Quando as janelas fecham, os threads são encerrados (ou seja, eles saem).

Este é um comportamento normal. No entanto, se o aplicativo está criando encadeamentos e há muitas mensagens de saída de encadeamento correspondentes a esses encadeamentos (pode-se dizer possivelmente pelos nomes dos encadeamentos, dando-lhes nomes distintos no aplicativo), então talvez isso seja indicativo de um problema com o aplicativo criando threads quando não deveria, devido a um erro de lógica do programa.

Seria um acompanhamento interessante se o autor da postagem original nos contasse o que descobriu sobre os problemas de travamento do servidor. Tenho a sensação de que não teria nada a ver com isso ... mas é difícil dizer a partir das informações postadas.


1

A execução de consultas Linq pode gerar threads extras. Quando tento executar um código que usa a coleção de consultas Linq na janela imediata, ele frequentemente se recusa a ser executado porque não há threads suficientes disponíveis para o depurador.

Como já foi dito, é perfeitamente normal que os threads saiam quando terminados.


0

Também enfrentei esse problema e a solução é:

  1. abrir a exploração da solução
  2. clique duas vezes no arquivo Program.cs

Adicionei este código novamente e meu programa foi executado com precisão:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.