Đây là một chương trình thử nghiệm đơn giản (Enable Just My Code, và đặt một điểm break trên đường thử nghiệm 1,2,3, & 4) nhắc đến bên dưới:
class Program
{
static void Main(string[] args)
{
TestDebuggerStepperBoundary(); // Test 1
Test(); // Test 2
TestDebuggerNonUserCode(TestDebuggerStepperBoundary); // Test 3
TestDebuggerNonUserCode(Test); // Test 4
}
[DebuggerNonUserCode]
private static void TestDebuggerNonUserCode(Action action) { action(); }
[DebuggerStepperBoundary]
private static void TestDebuggerStepperBoundary() { SomethingHorrible(); }
[DebuggerNonUserCode]
private static void Test() { SomethingHorrible(); }
private static void SomethingHorrible()
{
var foo = "bar";
}
}
Sau reviewing the definition for DebuggerStepperBoundaryAttribute, I don' t nghĩ rằng định nghĩa là hoàn toàn đúng:
thuộc tính DebuggerStepperBoundaryAttribute được sử dụng như một lối thoát từ ảnh hưởng của một DebuggerNonUserCodeAttribute.
Bạn có thể sử dụng DebuggerStepperBoundaryAttribute
mà không nằm trong ngữ cảnh của DebuggerNonUserCodeAttribute
. F11 trên Thử nghiệm 1 ngay lập tức chạm vào điểm ngắt tiếp theo trong Bài kiểm tra 2, mà không bị "hiệu ứng của DebuggerNonUserCodeAttribute
". Tôi nghĩ rằng điều này thực sự nên đọc "Thuộc tính DebuggerStepperBoundaryAttribute được sử dụng như một lối thoát từ hiệu ứng của Bước vào hoặc Bước Trong khi gỡ lỗi." Phần còn lại của defintion có ý nghĩa:
Khi thực hiện trong ranh giới của DebuggerNonUserCodeAttribute, thiết kế-cung cấp mã được thực thi như một bước qua cho đến khi sử dụng mã được cung cấp tiếp theo là gặp phải. Khi các công tắc ngữ cảnh được thực hiện trên luồng , mô-đun mã do người dùng cung cấp tiếp theo được bước vào có thể không liên quan với mã đang trong quá trình được gỡ lỗi. Để tránh trải nghiệm gỡ lỗi này, hãy sử dụng DebuggerStepperBoundaryAttribute để thoát khỏi bước qua mã để chạy mã. Ví dụ: trong Visual Studio 2005, gặp DebuggerStepperBoundaryAttribute khi bước qua mã bằng phím F10 (hoặc lệnh Step Over) có tác dụng tương tự như nhấn phím F5 hoặc sử dụng lệnh Bắt đầu Gỡ lỗi.
Vì vậy, để trả lời câu hỏi của tôi, nếu có một số mã khác mà bạn đã gọi, mà bạn không thể/không muốn thêm DebuggerStepThrough, DebuggerNonUserCode, hoặc DebuggerHidden tới, nhưng nếu debugger vào phương pháp này sẽ được nhiều hơn chói tai hơn là đi từ bước mã để chạy mã, sau đó sử dụng DebuggerStepperBoundaryAttribute.(Trong chương trình ví dụ của tôi, F11 trên Bài kiểm tra 2, đưa bạn trực tiếp đến SomethingHorrible
, có khả năng tồi tệ hơn việc chuyển thẳng sang hoạt động (F5)) Thêm một cách rõ ràng thêm Chuyển ngữ cảnh Chủ đề, và bên ngoài đó, tôi không biết về bất kỳ tình huống sẽ hữu ích.
Tôi có thể tưởng tượng nó có thể hữu ích nếu bạn có Trình lập lịch tác vụ hoặc điều gì đó tương tự và bạn đã kết thúc nhiệm vụ của mình. Thay vì bước trở lại vào mã khung công tác của bạn, nó sẽ chỉ cho phép Tác vụ kết thúc và sizzle vào nền. Nhưng cá nhân tôi đã không sử dụng nó. – jessehouwing
Dường như rất khó hiểu đối với nhà phát triển đang gỡ lỗi. – usr
@usr đó là những gì tôi nghĩ. – Daryl