2009-04-10 16 views
9

Estoy ejecutando un programa (principalmente) de subproceso único (hay un hilo principal que hace todo, los demás solo leen cosas). Puedo conseguir que la aplicación funcione correctamente en VS2008 después de un cambio menor (cambié el texto de un formulario y el orden de tabulación de otro formulario), pero ya no puedo hacerlo funcionar fuera del depurador. ¿Alguien sabe lo que podría causar esto?La aplicación C# se ejecuta con la depuración, pero no sin

Aclaración: Modo de publicación, iniciado con el depurador (F5) funciona. El modo de depuración, lanuched con depurador (F5) funciona. El ejecutable de depuración o el ejecutable de lanzamiento iniciado fuera de VS o con Ctrl + F5 falla.

Utiliza Virtual Earth 3D de Microsoft, y parece bloquearse justo cuando el 'anillo de esperanza' (anillo de carga) está por completarse.

registro de eventos dice: ".NET Runtime versión 2.0.50727.3053 - Fatal Error motor de ejecución (000006427F44AA6E) (80131506)"

culpable: esta línea:

 this.loader = PlugInLoader.CreateLoader(this.globeControl.Host); 

Causas que fallar Sin embargo, el formulario que estaba trabajando utiliza exactamente la misma línea sin problemas. Esta línea es nesseccary para que el programa funcione. No tengo idea de lo que está haciendo.

Otra ventaja el error parece estar dentro del .NET framework. La aplicación funcionó en otra máquina, intentando reinstalarla. Actualización: no hizo la diferencia, aunque cuando reparé VS no dejaba de decirme que Visual Studio se bloqueaba aunque no lo estaba ejecutando.


error Cuando inicio el programa después de un par de minutos me sale: aplicación ha generado una excepción que podría no controlarse.

Proccess ID = 0x9CC (2508), Thread ID = 0xF0C (3852).

Haga clic en Aceptar para finalizar la aplicación.
Haga clic en CANCELAR para depurar la aplicación.


El desmontaje es extraño:

0000000077EF2A90 int   3  
0000000077EF2A91 int   3  
0000000077EF2A92 int   3  
0000000077EF2A93 int   3  
0000000077EF2A94 int   3  
0000000077EF2A95 int   3  
0000000077EF2A96 xchg  ax,ax 
0000000077EF2A9A xchg  ax,ax 
0000000077EF2A9E xchg  ax,ax 
0000000077EF2AA0 int   3  <-- Crashes here 
0000000077EF2AA1 ret  

Se repite el mismo bloque de código varias veces (menos de hacha intercambiar con ella misma)


Además de mi equipo, que ha trabajado en cada máquina que lo he probado, a excepción de una VM en mi máquina que no instalará .NET Framework porque la configuración descarga 0 bytes de 0 bytes para el framework) ... wi encantadora sombras.

+0

¿Qué errores obtienes? –

+0

Ninguno, simplemente se cuelga. Windows dice que la aplicación debe cerrarse. – Malfist

+0

¿Puede ser más específico a lo que se refiere con "fuera del depurador"? ¿Quiere decir F5 frente a Ctrl + F5 en Visual Studio? Si va al directorio bin/debug y hace doble clic en el exe, falla? –

Respuesta

5

Lo arreglé, el .NET 2.0 Framework estaba corrupto y cuando lo reinstalé, todo mágicamente comenzó a funcionar nuevamente.

+0

No se puede encontrar la forma de reinstalar. El instalador dice que ya está instalado.El Panel de control (Agregar o quitar programas) tiene un botón Cambiar que muestra un diálogo y un medidor de progreso, pero no dice si reinstaló algo o incluso si tuvo éxito o falló. Todo lo que intenté no tuvo ningún efecto en la incapacidad de mi programa para funcionar. –

+0

Necesita una herramienta de terceros, Microsoft no le permitirá eliminarla. Está buscando dotnetfx o .NET Fix. Google it, no debería ser demasiado difícil de encontrar. Según Microsoft, este tipo de cosas no sucede, por lo tanto no puedes desinstalarlo. – Malfist

+0

¿Por qué se votó a favor? Es lo que resolvió el problema ... – Malfist

0

¿Buscar las directivas #if (DEBUG)? Buscar Debug.Assert (?

¿Ha buscado en Google el error?He encontrado el hilo this (no es terriblemente útil)

+0

Es una aplicación que usa Virtual Earth 3D para crear animaciones, y funcionó hasta que cambié algunas cosas menores. – Malfist

+0

No hay #if (DEPUR) en la aplicación – Malfist

+0

Winforms o webapps –

2

Here es un artículo de soporte con ese error. ¿Eso aplica?

Quizás el depurador está comiendo una excaption que está lanzando la API VE3D. En VS, haga un ctrl + alt + e y cámbielo para romper cada vez que se lanza una excepción. Esto puede ser tedioso, porque romperá todos tus bloques de captura de prueba, pero podría darte cierta información.

Here es alguna información. sobre ese PlugInLoader. Parece implicar que debe ser llamado desde el manejador de eventos FirstFrameRendered. ¿Tal vez una de tus formas está haciendo eso y otra no?

+0

No, está compilado como .net 3.5 y se ejecutó bajo un usuario con un perfil (me) – Malfist

+0

si lo llamas desde el evento FirstFrameRendered, es demasiado tarde. Es una de las pocas cosas que se debe llamar antes de eso. Sin embargo, la carga de complementos ocurre después de que se haya procesado el primer fotograma. – Malfist

7

Tuve problemas similares cuando los conflictos de temporización causaban el error, y mi depuración (puntos de interrupción y paso a través del código) forzó al código a ejecutarse en el orden correcto.

+0

Esa es una idea interesante, pero ¿realmente puede ser el problema si su aplicación escribe solo en un solo subproceso? –

+0

no hay puntos de interrupción en el depurador :( – Malfist

+0

Tiene razón, normalmente es causado por multi-threading, pero a veces el objeto está haciendo multi-threading en el fondo. –

5

Pruebe optimizaciones de despegue de la versión Release (en la configuración del proyecto) y vea si eso ayuda.

+0

Esto resolvió el problema para mí. –

4

No puedo decirle exactamente cuál es el problema, pero esto es lo que podría hacer para obtener una idea de lo que realmente está sucediendo. Asumo que está utilizando VS2008 o 2005.

  1. Cambiar a modo de liberar
  2. Ir a debug \ excepciones, y Mark excepciones todos "lanzados", como se muestra aquí: ejecutable http://vvcap.net/db/JbWS_tzy2IpBoI7R7amm.htp
  3. Ejecutar en el depurador, ignorar las advertencias de VS que no hay información de depuración

parece que hay una excepción Win32 arrojado algo de tiempo durante la ejecución, pero de esta manera o de otra, obtendrá uno o más mensajes de depuración que explica qué tipo de excepción sucedió y dónde. En la mayoría de los casos esos mensajes hacen que sea bastante claro qué fue exactamente equivocado

EDIT: Una cosa que me olvidé de mencionar es que la depuración no administrado también debe estar encendido, tales como here (when you start program directly from IDE) o here (when you attach to running process)

+0

alguien ya me pidió que hiciera eso, no hace ninguna diferencia. No se lanza nada. Nada. Simplemente se cuelga fuera de un depurador. – Malfist

0

queda una cosa que creo que es usar WinDbg para intentar depurarlo. Estos son algunos enlaces sobre cómo usarlo:

  1. http://www.codeproject.com/KB/debug/windbg_part1.aspx
  2. http://blogs.msdn.com/johan/archive/2007/11/13/getting-started-with-windbg-part-i.aspx
  3. http://blogs.msdn.com/tess/ (buen blog acerca de la depuración en general, en windbg)

Pensando en ello, sino que también podría haber alguna servicio o algo que está en conflicto. Intente detener todos los servicios innecesarios y cierre los programas innecesarios (incluidos los de inicio) y vea qué sucede entonces.

0

Una vez tuve un problema similar con exactamente el mismo comportamiento utilizando un plug-in-sistema. Al cargar un complemento de un MarshalByRef -objeto (ver código de ejemplo a continuación), parece que .NET crea un nuevo dominio de aplicación o contexto para el conjunto cargado. (¿Alguien puede confirmar esto? No he encontrado ninguna fuente en relación con esto.)

public class ProxyAssemblyLoader : MarshalByRefObject { 
    public Assembly GetAssembly(string path) { 
     return Assembly.LoadFrom(path); 
    } 
} 

Además, en mi caso, el plug-in de cargas una versión diferente de la mscorlib. (Mi aplicación es CLR2 y la cargada es CLR4) Después utilicé el complemento por reflexión e intenté acceder a un valor del nuevo mscorlib, que se cargó desde el otro dominio de la aplicación. Por lo general, ambos deben ser utilizables porque el mscorlib es un ensamblaje comúnmente utilizado y solo se carga una vez (consulte Global Assembly Cache). Pero parece como si este no fuera el caso. Pero en general, Microsoft advises to avoid eso.

No he averiguado exactamente cuál era el problema, pero calculé la llamada que hace que la aplicación falle sin ninguna pista. ¿Por qué sin alguna pista? Se bloqueó sin ninguna pista, porque la excepción arrojada solo estaba disponible en el dominio de aplicación "el otro" y no está disponible para el dominio principal/predeterminado de la aplicación.

La acción tomada fue simplemente copiar implícitamente el valor de otro ensamblado de appdomains a un valor sin tipo local (object) en el dominio de aplicación predeterminado. Esto fue suficiente para obtener un error de coincidencia de identidad de tipo debido a diferentes versiones del ensamblaje. Parece que Visual Studio podría manejarlo, pero si la aplicación se ejecuta de forma autónoma, se bloquea.

Esto también puede explicar por qué necesitó reinstalar su .NET. Tal vez su .NET-Framework instalado era una versión beta o algo así, que contenía una pequeña diferencia.

En conclusión algunas soluciones generales para el problema podría ser:

  • Evitar el uso de diferentes versiones de los conjuntos con diferentes versiones del mismo tipo.
  • En otros casos, puede intentar cargar ambos conjuntos dentro del mismo dominio de aplicación. (En la medida de lo posible con respecto al contexto de sondeo.)
  • Una solución para cross appdomain communication could be serialization de los valores.
  • (Asegúrese de que la correcta .NET Framework no está instalado la versión beta.)
0

que tenían el mismo problema exacto con una de mis aplicaciones de consola. Decidí que era mi antivirus (Avast) el que causaba el problema.

Agregue la carpeta BIN a la lista de exclusión y deshabilite "DeepScreen". ¡Luego reconstruye el proyecto y vuelve a intentarlo!

Cuestiones relacionadas