Tôi đã nhìn thấy một trường hợp tương tự cách đây một thời gian dài, ở Delphi, do đó, câu hỏi của tôi là: Bạn có biên soạn cho Bản phát hành hoặc Gỡ lỗi, có hoặc không có tối ưu hóa không?
Lý do tôi hỏi là một lần, trong một phiên gỡ lỗi, tôi phát hiện ra một quy trình nhỏ bao gồm 4-5 dòng mã, theo trình gỡ lỗi, dường như đang thực hiện ngược lại.
Về cơ bản, với các loại mã sau đây:
procedure Test;
begin
Line1;
Line2;
Line3;
line4;
end;
Trình tự thực hiện, theo trình gỡ lỗi, là thế này:
procedure Test;
begin start -+
Line1; | +-> here -+
Line2; | +-> here -+ |
Line3; | +-> here -+ |
line4; +-> here -+ |
end; +-> end
Lý do là các dòng là tác dụng phụ miễn phí ở giữa bản thân, do đó, trình biên dịch "tối ưu hóa" mã bằng cách viết lại nó, có hiệu lực sắp xếp lại mã để xuất hiện để thực thi hoàn toàn ngược lại. Vì vậy, bạn có một tuyên bố ném tiếp tục xuống mà thực sự là một trong những nhận được thực hiện, nhưng trình biên dịch cho thấy điều này là một trong những bạn có vấn đề với, bởi vì, do sắp xếp lại mã, hai ném-thực sự chỉ phát ra một lần là mã thực thi?
Lưu ý: Tôi không có bất kỳ lý do gì để biết rằng đây là những gì Visual Studio đang làm, nhưng đây là những gì tôi nghĩ khi xem video của bạn.
Nguồn
2009-10-22 09:08:47
+1 cho video. – GenericTypeTea
phiên bản nào của VS? Bạn có gói dịch vụ mới nhất được áp dụng không? –
VS2008 + Gói dịch vụ mới nhất –