He visto un caso similar hace mucho tiempo, en Delphi, así que mi pregunta es esta: ¿Estás compilando para Release o Debug, con o sin optimizaciones?
La razón por la que estoy preguntando es que una vez, durante una sesión de depuración, descubrí un pequeño procedimiento que consistía en 4-5 líneas de código que, según el depurador, parecían estar ejecutándose en reversa.
Básicamente, con el siguiente tipo de código:
procedure Test;
begin
Line1;
Line2;
Line3;
line4;
end;
El orden de ejecución, de acuerdo con el depurador, era la siguiente:
procedure Test;
begin start -+
Line1; | +-> here -+
Line2; | +-> here -+ |
Line3; | +-> here -+ |
line4; +-> here -+ |
end; +-> end
La razón era que las líneas era libre de efectos secundarios entre ellos, por lo que el compilador "optimizó" el código reescribiéndolo, reorganizando el código para que parezca ejecutarse completamente en reversa.
Entonces, ¿tiene una instrucción throw más abajo que en realidad es la que se ejecuta, pero el compilador muestra esto como la que tiene problemas, porque, debido a la reorganización del código, dos declaraciones de tiro son en realidad solo emitido una vez como código ejecutable?
Nota: No tengo ninguna razón para saber que esto es lo que está haciendo Visual Studio, pero esto fue lo que me vino a la mente al ver su video.
+1 para el video. – GenericTypeTea
¿qué versión de VS? ¿tiene aplicado el último service pack? –
VS2008 + Último service pack –