2010-08-04 8 views
6

El siguiente código arroja una ExecutionEngineException cuando ejecuto el lanzamiento ejecutable de compilación (inicie exe ​​file). ¿Es esto un error o es un comportamiento normal? Tipolista genérica de tipos de valores con diseño secuencial y tamaño de paquete -> ¿ERROR?

valor de las dimensiones del paquete = 1:

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public struct RunLong 
{ 
    public byte Count; 
    public long Value; 

    public RunLong(byte count, long value) 
    { 
     Count = count; 
     Value = value; 
    } 
} 

Uso de la estructura en una lista genérica (T), la adición de los valores y obtener o establecer su propiedad de valor hace que el accidente ejecutable si se ha incorporado en la liberación modo. El bloqueo no se produce cuando el ejecutable está integrado en el modo de depuración o cuando se ejecuta el código dentro del depurador de Visual Studio (versión o modo de depuración).

List<RunLong> runs = new List<RunLong>(1024); 

for (int i = 0; i < 1000; i++) 
{ 
    runs.Add(new RunLong(1, i)); 
} 

RunLong last = runs[runs.Count - 1]; 

last.Count = (byte)(last.Count + 1); 

runs[runs.Count - 1] = last; 

¿Alguien puede confirmar esto? Hay una explicación razonable?

Me postulo VS 2010, .NET 4, Win XP SP3

Gracias de antemano!

+0

¿Qué línea arroja la excepción? –

+0

la primera lista .Add llamada – user410903

Respuesta

2

Esto aparece en la superficie como un error en el motor x86 JIT. Esto sólo repros bajo las siguientes circunstancias

  • Compilar en menor
  • compilar para x86
  • Ejecutar sin depurador de Visual Studio (repros bajo WinDBG aunque)

No Repro en modo amd64 aunque lo que me hace sospechar que es

  1. Un problema de alineación (también conocido como error en su código)
  2. Un tema JIT x 86

no soy un experto en la alineación de ninguna manera pero creo que su código sea correcto. Por favor, presente un error en la conexión para asegurarse de que se investigue el problema y agregue el enlace de error a la sección de comentarios de mi respuesta (me gustaría rastrearlo internamente).

+0

Gracias por la respuesta, me han publicado en el problema de conexión: https://connect.microsoft.com/VisualStudio/feedback/details/583519/generic-list-of-value- types-with-sequential-layout-and-pack-size-x86-jit-engine-bug – user410903

+0

@jassman, podría comprobar su enlace, parece ser incorrecto. Busqué el problema y no pude encontrarlo. – JaredPar

+0

intenté este enlace con otra cuenta real y funciona para mí: https://connect.microsoft.com/VisualStudio/feedback/details/583519/generic-list-of-value-types-with-sequential-layout- and-pack-size-x86-jit-engine-bug – user410903

6

Este problema se corrigió en MS11-028 semana pasada. Ver mi weblog para más detalles.

Cuestiones relacionadas