2009-10-22 11 views
11

Tôi đã gặp một vấn đề lạ lẫm đến nỗi tôi đã ghi lại phiên của mình vì tôi không nghĩ có ai sẽ tin tôi.Nếu sự kỳ lạ trong Visual Studio 2008

Tôi bắt gặp một lỗi có vẻ ở cấp độ rất cơ bản. Đây là một ứng dụng đơn luồng và tất cả im đang làm là đánh giá một boolean.

Boolean bằng false, tuy nhiên, câu lệnh if đang thực thi như thể nó đúng ... loại. Bạn sẽ thấy những gì tôi có ý nghĩa. Tôi đã làm sạch giải pháp và xây dựng lại nhiều lần. Không có ý tưởng whats đang xảy ra.

Tôi rất muốn một số giải thích.

http://www.youtube.com/watch?v=ope9kxEyt4g

+0

+1 cho video. – GenericTypeTea

+0

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? –

+0

VS2008 + Gói dịch vụ mới nhất –

Trả lời

6

tôi đoán là một cái gì đó kỳ lạ đang xảy ra tại triển khai, do đó pdb không đồng bộ với mã thực tế. Nếu bạn sử dụng đăng nhập thay vì trình gỡ rối để tìm ra những gì đang xảy ra, tôi nghi ngờ bạn sẽ thấy hành vi hợp lý hơn. Tôi nghi ngờ rằng đó là CLR chính nó hành xử kỳ lạ với một "nếu" - nó nhiều khả năng là một trình gỡ rối/thời gian không nhất quán.

+0

Tôi đã tự xóa chính thư mục bin, chúng ta đang nói về một bản dựng mới. Tôi thích ý tưởng đưa vào các câu lệnh gỡ lỗi để xem điều gì đang xảy ra. Tôi sẽ thử cái này. Cảm ơn Jon. –

+0

Thứ hai. Gỡ lỗi ứng dụng ASP.NET tôi đang nâng cấp đôi khi ném ra debugger một chút.Ví dụ đơn giản nhất là khi bạn chèn một số mã vào một phương thức, bắt đầu gỡ lỗi và thấy rằng các dòng đó không bao giờ được thực thi - chúng chỉ nhảy qua. Hoặc khi trình gỡ lỗi làm nổi bật một dòng nhưng thực sự thực hiện một dòng sau. Xóa obj/và bin/thư mục luôn giúp tôi. – Audrius

0

Tôi nghĩ rằng điều này trông giống như một trường hợp mà các phạm vi bước gỡ lỗi chỉ tắt. Bạn không thể luôn luôn tin tưởng nổi bật màu vàng trong trình gỡ rối. Bạn đang không thực sự bước vào. Trong Betas trước đó của F # chúng tôi đã có rất nhiều lỗi như thế này, nơi nổi bật màu vàng sẽ nhảy xung quanh như điên. Việc làm nổi bật trình gỡ rối chủ yếu là ở lòng thương xót của bất kỳ trình biên dịch nào ghi vào tệp .pdb làm 'phạm vi nguồn' tương ứng với một tập hợp các hướng dẫn được biên dịch cụ thể.

Phiên bản nào của VS/C# là phiên bản này?

EDIT Sau khi xem câu trả lời của người khác, thực sự nguyên nhân có thể là tệp .pdb của bạn không đồng bộ với .dll của bạn.

+0

Tôi sẽ thử xóa các tệp obj và tất cả các tệp tạm thời và tệp được tạo khác khi tôi quay lại làm việc vào Thứ Hai. Tôi sẽ giữ cho tất cả các bạn được đăng. –

+0

Tôi đang sử dụng .NET framework 3.5 và VS2008 –

8

Tôi đã thấy nhiều lần trong quá khứ. Về cơ bản những gì đang xảy ra là mã bạn đang gỡ lỗi không khớp với mã bạn đang thấy.

Tôi không biết điều gì gây ra điều này và giải pháp tuân theo hướng dẫn vận chuyển hàng hóa.

  • Đóng tất cả các bản sao của Visual Studio
  • Xóa tất cả các bin của bạn và đối tượng thư mục cho dự án này
  • Xóa tất cả các bin của bạn và đối tượng thư mục cho tất cả các dự án NET
  • Xóa tất cả các file yo tìm trong "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Tệp ASP.NET tạm thời"
+19

đừng quên hy sinh một con dê (để có biện pháp tốt)! –

+0

Tôi đã xóa tất cả các tập tin trong thư mục bin, tôi hoàn toàn quên về obj và các tập tin asp tạm thời. Sẽ cung cấp cho một shot. Tôi vẫn không hiểu tại sao hardcoding một sai tạo ra kết quả mong muốn hoặc tại sao đưa vào một tuyên bố khác sửa chữa vấn đề. –

+0

Xin lỗi tôi đã bỏ phiếu cho câu trả lời của bạn, tuy nhiên hóa ra tất cả những điều đó vẫn chưa khắc phục được vấn đề. Tôi đã xóa tất cả các thư mục bin, thư mục Obj, tất cả các tệp asp tạm thời cả x86 và x64 và vẫn là cùng một vấn đề. –

0

Tôi đã có cùng một vấn đề tuần trước. Cũng có VS2008, SP mới nhất. Ứng dụng WinForms. Giá trị sai nhưng if nội dung luôn được thực hiện. Tôi đã làm điều tra tương tự như trong video của bạn. Đây là đoạn mã của tôi:

if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion)) 
    throw new SimulationFormatException(ws, ss); 

Chạy mà không có trình gỡ lỗi được biên dịch là 'Phát hành' là tốt. Thử nó.

Tôi cho rằng có lỗi trong trình sửa lỗi VS2008. Bằng cách nào đó có thể tái sản xuất với các từ khóa 'if' và 'throw'.

CHỈNH SỬA: từ 'được thực thi' ở trên là sai. 'Thay vào đó nhưng không được thực thi' phải được sử dụng thay thế.

+1

Liệu if-block thực sự được thực thi hay nó chỉ được trình gỡ lỗi đánh dấu? Trong video của Vince có vẻ như mã không được thực thi (đối tượng ngoại lệ e là null). –

+0

Không được thực thi như trong video. –

3

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.

0

Chỉ cần thêm "tôi cũng vậy" ở đây trên làm nổi bật mã sôi nổi. Tôi đang chạy VS2008 với C#. Tôi có một dự án Windows Forms tham chiếu một thư viện lớp trong một dự án khác và tôi đang gỡ lỗi cả hai dòng theo dòng. "Tại một số điểm" điểm nhấn màu vàng trong gỡ lỗi là bất cứ nơi nào từ 14 đến 20 dòng ra khỏi dòng thực tế đang được thực thi.

Tôi đã đóng VS, mở thư mục cho cả hai dự án, xóa mọi thứ khỏi bin/Debug và obj/Debug trong cả hai thư mục, sau đó khởi động lại VS. Ngày biên dịch lại và bước qua gỡ lỗi, mọi thứ đều tốt đẹp một lần nữa.

Tôi không biết sự cố có ở tệp .manifest, .pdb hoặc có lẽ là tệp .Cache hay không. Nó không quan trọng. Thổi um tất cả đi và nó sẽ ổn thôi.

FWIW, Googling gần như vô dụng ngoại trừ việc nó trả về chuỗi SO này. Tất cả các hit khác là về các vấn đề với các mẫu VC++ và VS2005, trong đó SP cố định vấn đề đó. Đây không phải là vấn đề tương tự.

+0

Tôi đã từ bỏ vấn đề này. Tôi đã thử tất cả mọi thứ, tôi xóa tất cả các DLL từ các tập tin Internet tạm thời, tất cả các tập tin địa phương trong Bin và thậm chí di chuyển các giải pháp cho máy tính khác. Vấn đề có vẻ là trong trình gỡ lỗi và không chắc chắn lý do tại sao. –