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?

Foi útil?

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 ...

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