Я уже видел похожий случай в Delphi, поэтому у меня такой вопрос: вы компилируете для Release или Debug, с оптимизацией или без нее?
Причина, по которой я спрашиваю, состоит в том, что однажды во время сеанса отладки я обнаружил небольшую процедуру, состоящую из 4-5 строк кода, которая, согласно отладчику, выполнялась в обратном порядке.
В основном со следующим типом кода:
procedure Test;
begin
Line1;
Line2;
Line3;
line4;
end;
Порядок выполнения, согласно отладчику, был таким:
procedure Test;
begin start -+
Line1; | +-> here -+
Line2; | +-> here -+ |
Line3; | +-> here -+ |
line4; +-> here -+ |
end; +-> end
Причина заключалась в том, что между строками не было побочных эффектов, поэтому компилятор «оптимизировал» код, переписав его, фактически переставив код так, чтобы он полностью выполнялся в обратном порядке.
Итак, у вас есть оператор throw ниже, который на самом деле исполняется, но компилятор показывает это как тот, с которым у вас проблемы, потому что из-за перестановки кода два оператора выброса на самом деле только испускаются один раз как исполняемый код?
Примечание : У меня нет никаких оснований знать, что именно этим занимается Visual Studio, но именно это пришло мне в голову при просмотре вашего видео.