2012-12-20 50 views
9

Trong quá khứ, tôi đã bị đốt cháy bởi sự cố "tác dụng phụ-trong-một-người truy cập" khi gỡ lỗi; có nghĩa là tôi đã có bộ nhớ cache được khởi tạo mà không có điểm ngắt được kích hoạt (vì nó đã bị tạm dừng trong phòng thu trực quan). Và vì vậy tôi đã tự hỏi về cơ chế mà Visual Studio sử dụng để thực thi mã "không theo thứ tự", để đánh giá các thuộc tính trong trình gỡ lỗi. Dường như với tôi rằng điều này sẽ phá vỡ CLR?Visual Studio đánh giá các thuộc tính trong khi gỡ lỗi trong C# như thế nào?

Vì vậy, câu hỏi: Làm thế nào điều này được thực hiện từ quan điểm kỹ thuật? Các bài viết giải thích nó sẽ hữu ích.

+0

tôi dường như nhớ đến qua một bài viết về nó một thời gian trước, nhưng Google-fu của tôi là quá yếu để tìm thấy nó một lần nữa. – Smashery

+0

Để bắt đầu [Phản ứng phụ và Biểu thức] (http://msdn.microsoft.com/en-us/library/a7a250bs.aspx) – horgh

Trả lời

2

Có vẻ như VS2012 (và có thể là phiên bản cũ hơn) thực hiện bộ khởi động của thuộc tính bằng cách sử dụng "Main Thread" hoặc có thể là chuỗi nhấn breakpoint.

Đây là mã của tôi thử nghiệm:

static class TestSideEffects 
{ 
    public static void Test() 
    { 
     Console.WriteLine("Main Thread: {0}", Thread.CurrentThread.ManagedThreadId); 
     var o = new TestSubject(); 
     Console.WriteLine("Property Value: {0}", o.IntGetValueNoSe()); 
    } 
} 

class TestSubject 
{ 
    private int _prop=0; 
    public int TheProperty 
    { 
     get 
     { 
      Console.WriteLine("Thread accessing the property: {0}", Thread.CurrentThread.ManagedThreadId); 
      return ++_prop; 
     } 
    } 
    public int IntGetValueNoSe(){return _prop; } 
} 

tôi đặt hai breakpoint: trên dòng thứ 3 của phương pháp thử nghiệm và trong getter chính nó, và mỗi khi tôi di chuột của tôi trong ví dụ o - nó thực thi getter mà không kích hoạt điểm ngắt khác. Nó sử dụng cùng một chủ đề (chính trong trường hợp này).

Đây là sản phẩm của các chương trình thử nghiệm:

Main Thread: 8 
Thread accessing the property: 8 
Thread accessing the property: 8 
Thread accessing the property: 8 
Các vấn đề liên quan