Por que um aplicativo age de forma diferente após VS depurador é anexado?
-
02-07-2019 - |
Pergunta
Há um aplicativo de desktop escrito em C # tentando gerenciar uma conexão de soquete e falhando, mas ser bem sucedido após a mesma aplicação é anexado ao estúdio visual.
como ele pode ser depurado?
Solução
Este é um exemplo clássico de temporização.
Se funcionar no depurador, então isso significa que você tem que re-fator de seu código um pouco para lidar com isso.
Agora, se você está aplicativo é um soquete servidor que recebe ligações de cliente e tentar gerar um segmento para cada uma dessas conexões, você pode ter que considerar o uso de select () para gerenciar as conexões com em um fio.
Outras dicas
Eu diria problemas de tempo demasiado com o depurador anexado vai abrandar ligeiramente o código que pode significar que uma condição de corrida não está ocorrendo.
Para depurar-lo tentar adicionar algum código de registro para sua aplicação, eu pessoalmente uso log4net
Você não deve ter e problemas com malloc e similares como você está codificando em C #.
Se você estiver executando uma aplicação web pode ser também há uma diferença no servidor Web Cassini em VS e o que você está implantando.
Normalmente, problemas de tempo. Existem tópicos envolvidos? Se C / C ++, então poderia haver uma série de razões por causa de como erros de gerenciamento de memória pode comportar.
Você pode ter variáveis ??cujos valores padrão são diferentes quando rodando sob o compilador ao contrário de standalone. condições de corrida pode ser uma outra idéia se existem tópicos envolvidos.
Se você está alocando RAM via malloc ou novo, então certifique-se de que a memória é inicializado adequadamente antes de usá-lo.
Nós realmente encontrou um problema semelhante. O sincronismo é uma parte crítica desta. Bem como jogando no-ops no código (diferença primária w / código depurado).
Com a programação socket, parece que a depuração w / VisualStudio.Net é como ter Application.DoEvents adicionais () chamadas efectuadas. Descobrimos que temos coisas que irá falhar (não-depuração) a menos que permitir que o componente de respirar (por exemplo, lidar com os seus próprios eventos) chamando Application.DoEvents ().
Quando atribui o Visual Studio para a sua aplicação, a CLR e JIT têm diferenças de tempo de execução sutis para habilitar a depuração. coleta de lixo, por exemplo, é diferente.
http://stupiddumbguy.blogspot.com /2008/05/net-garbage-collection-behavior-for.html
Pode ser porque você está assistindo propriedades com efeitos colaterais em seu depurador. Embora as outras respostas aqui são mais propensos ...