Domanda

Esiste un'applicazione desktop scritta in c # che tenta di gestire una connessione socket e fallisce ma ha esito positivo dopo che la stessa applicazione è stata collegata a Visual Studio.

come può essere eseguito il debug?

È stato utile?

Soluzione

Questo è un classico esempio di tempismo.

Se funziona nel debugger, significa che è necessario ricodificare un po 'il codice per gestirlo.

Ora, se sei un'app è un socket del server che riceve connessioni dal client e sta provando a generare un thread per ognuna di quelle connessioni, potresti dover considerare di utilizzare select () per gestire le connessioni in un thread.

Altri suggerimenti

Direi che anche i problemi di temporizzazione con il debugger collegato rallenteranno leggermente il codice, il che potrebbe significare che non si sta verificando una race condition.

Per eseguire il debug provare ad aggiungere un po 'di codice di registrazione alla tua applicazione, uso personalmente log4net

Non dovresti avere problemi con malloc e simili mentre stai programmando in c #.

se stai eseguendo un'app Web, potrebbe anche esserci una differenza tra il webserver cassini in VS e quello in cui stai distribuendo.

Di solito, problemi di temporizzazione. Ci sono discussioni coinvolte? Se C / C ++, potrebbero esserci molte ragioni a causa del comportamento dei bug di gestione della memoria.

Potresti avere variabili i cui valori predefiniti sono diversi quando si esegue sotto il compilatore rispetto a standalone. Le condizioni di gara potrebbero essere un'altra idea se ci sono discussioni.

Se stai allocando RAM tramite malloc o new, assicurati che la memoria sia inizializzata correttamente prima di usarla.

In realtà abbiamo riscontrato un problema simile. Il tempismo è una parte fondamentale di questo. Oltre a lanciare no-op nel codice (differenza principale con codice di debug).

Con la programmazione dei socket, sembra che il debug con VisualStudio.Net sia come fare ulteriori chiamate Application.DoEvents (). Abbiamo scoperto che abbiamo cose che falliranno (senza debug) a meno che non consentiamo al componente di respirare (ad esempio gestire i propri eventi) chiamando Application.DoEvents ().

Quando Visual Studio si collega all'applicazione, CLR e JIT presentano sottili differenze di runtime per abilitare il debug. La raccolta dei rifiuti, ad esempio, è diversa.

http://stupiddumbguy.blogspot.com /2008/05/net-garbage-collection-behavior-for.html

L'IT potrebbe essere perché stai guardando proprietà con effetti collaterali nel tuo debugger. Sebbene le altre risposte qui siano più probabili ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top