¿por qué una aplicación que actúa de manera diferente después de VS depurador está conectado?
-
02-07-2019 - |
Pregunta
Hay una aplicación de escritorio escrita en c# tratando de gestionar una conexión de socket y fallando, pero tener éxito después de la misma aplicación se adjunta a visual studio.
¿cómo puede ser depurado?
Solución
Este es un ejemplo clásico de temporización.
Si funciona en el depurador, a continuación, significa que usted tiene que re-factor de su código un poco a manejar esto.
Ahora, si usted está aplicación es un socket de servidor que recibe las conexiones de cliente y tratando de generar un hilo para cada una de esas conexiones, usted tendrá que considerar el uso de select() para administrar las conexiones en un solo hilo.
Otros consejos
Yo diría que los problemas de sincronización también tener el depurador se ralentizará el código ligeramente, lo cual podría significar que una condición de carrera no se produzca.
Depurar es tratar de añadir algo de código de registro para su aplicación, yo personalmente uso log4net
Usted no debería tener problemas y con malloc y el estilo, como en la codificación en c#.
si está ejecutando una aplicación web también podría ser que hay una diferencia en el servidor web de cassini en el VS y el que va a implementar.
Generalmente, los problemas de sincronización.Hay subprocesos involucrados?Si C/C++, entonces podría haber un montón de razones, porque de cómo la gestión de memoria de los insectos podrían comportarse.
Usted podría tener variables cuyos valores predeterminados son diferentes cuando se ejecuta en el compilador frente a independiente.Las condiciones de carrera podría ser otra idea si hay subprocesos involucrados.
Si la asignación de RAM a través de malloc o nuevo, a continuación, asegúrese de que la memoria es inicializado correctamente antes de usarlo.
De hecho, hemos detectado un problema similar.El tiempo es una parte crítica de este.Así como tirar no-ops en el código (diferencia principal con w/ depurando código).
Con la programación de la cavidad, parece como si la depuración w/ VisualStudio.Net es como tener una Aplicación adicional.DoEvents() llamadas realizadas.Hemos encontrado que tenemos cosas que no se cumplen (no de depuración) a menos que permitir que el componente de la respiración (por ejemplo,manejar sus propios eventos) por Aplicación de llamada.DoEvents().
Cuando Visual Studio adjunta a su solicitud, el CLR y el JIT tiene sutiles diferencias de tiempo de ejecución de habilitar la depuración.La recolección de basura, por ejemplo, es diferente.
http://stupiddumbguy.blogspot.com/2008/05/net-garbage-collection-behavior-for.html
Podría ser porque estás viendo propiedades con efectos secundarios en el depurador.A pesar de que las otras respuestas aquí son más probable...