2011-11-17 29 views
17

Trong đối tượng C# của tôi, tôi đặt điểm ngắt có điều kiện với điều kiện value == "Status" trong setter của thuộc tính này. Thông thường nó được trang trí với một khía cạnh PostSharp, nhưng tôi đã nhận xét rằng trong trường hợp này, và nó vẫn gặp rắc rối.Tại sao Visual Studio không đặt điểm ngắt có điều kiện trên thuộc tính C# đơn giản này?

public virtual string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     _name = value; // breakpoint here 
    } 
} 

Việc thực hiện lần đầu tiên đạt breakpoint, VS sẽ hiển thị một lỗi:

Visual Studio MessageBox

EDIT - cho khả năng tìm kiếm, thông điệp là:

The following breakpoint cannot be set:

At (file).cs, line 137 character 17 ('(class).Name', line 12), when 'value == "Status"' is true

The function evaluation requires all threads to run.

Dưới đây là những gì các Chủ đề cửa sổ trông giống như:

Debugger Threads window

Bất cứ ai nhìn thấy điều này trước đây, hoặc có bất kỳ ý tưởng nào có thể khiến trình gỡ lỗi lặp lại trong trường hợp dường như đơn giản này? Có thể nó có cái gì để làm với các chủ đề ngủ?

+1

liên kết này có thể hữu ích: http://msdn.microsoft.com/en-us/library/z4ecfxd9.aspx, http: //blogs.msdn. com/b/greggm/archive/2005/11/18/494648.aspx –

+0

Trong nỗ lực của tôi để đưa ra một giải pháp thay thế, tôi thấy rằng ít nhất là đôi khi có thể vô hiệu hóa điểm ngắt, chạy ('F5') và ngay lập tức bật lại điểm ngắt. Tôi muốn nguy hiểm đoán rằng thông điệp luồng không phải là cá trích đỏ tôi đã giả định nó được, mặc dù nguyên nhân thực sự vẫn eludes tôi ... Tất nhiên, thực tế là trình gỡ lỗi cần bất kỳ chủ đề khác hơn hiện tại một để được hoạt động để đánh giá một giá trị tham số làm cho ít ý nghĩa với tôi. Điều đó nói rằng, tôi chưa bao giờ viết một trình gỡ rối :) –

+0

@PetrAbdulin Các liên kết tốt, nhưng tôi vẫn thua lỗ vì sao lại đánh giá 'giá trị' (đó là một tham số, mà tôi chắc chắn hy vọng không phải là một func eval) và equating nó vào một chuỗi chữ sẽ làm bất cứ điều gì mà đòi hỏi một thread –

Trả lời

1

tôi cuối cùng đã nghĩ ra một cách giải quyết:

public virtual string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     if (value == "Status") 
      DoSomeNoOp(); // Breakpoint here, or Debug.Fail() inside your no-op 

     _name = value; 
    } 
} 
1

Tôi đã từng gặp vấn đề này khi gặp phải tình huống khi nó thoát khỏi quá trình thực hiện chuỗi cơ sở. Thêm một chút thông tin về luồng ứng dụng của bạn sẽ giúp ích. Dường như với tôi như một điều kiện đua.

0

Tôi không nghĩ rằng nó biết những gì value là. Hãy thử đặt điểm ngắt khi đóng } và sử dụng _name trong điều kiện.

+0

'giá trị' không phải là vấn đề; Tôi đã sử dụng biểu tượng đó trong các điều kiện khác và nó đã hoạt động tốt. –

Các vấn đề liên quan