Вот простая программа испытаний (Enable Just My Code, и поставить точку останова на линии тест 1,2,3, & 4) говорится ниже:
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";
}
}
После reviewing the definition for DebuggerStepperBoundaryAttribute, я не» т думаю, что определение вполне прав:
атрибут DebuggerStepperBoundaryAttribute используется как побег от эффекта DebuggerNonUserCodeAttribute.
Вы можете использовать DebuggerStepperBoundaryAttribute
, не будучи в контексте DebuggerNonUserCodeAttribute
. F11 на Тест 1 немедленно попадает в следующую точку останова на Тест 2, не находясь в «эффекте DebuggerNonUserCodeAttribute
». Я думаю, что это должно действительно читать: «Атрибут DebuggerStepperBoundaryAttribute используется как побег от эффекта Step Into или Step Over во время отладки». Остальная часть Defintion имеет смысл:
При выполнении в пределах границ DebuggerNonUserCodeAttribute, дизайнер предоставляемый код выполняется как шаг-через до следующего пользователь ввел код встречается. Когда переключатели контекста выполняются в потоке , следующий входящий в комплект код модуля кода, входящий в систему, может не связываться с кодом, который был в процессе отладки. Чтобы избежать этого отладки , используйте DebuggerStepperBoundaryAttribute до , чтобы избежать перехода от кода к запущенному коду. Например, в Visual Studio 2005, столкнувшись с атрибутом DebuggerStepperBoundaryAttribute при выполнении кода с использованием клавиши F10 (или команды «Шаг за шагом») имеет тот же эффект, что и нажатие клавиши F5 или с помощью команды «Отладка» Start .
Так, чтобы ответить на мой вопрос, есть ли какой-то другой код, который вы должны были позвонить, что вы не может/не хочет, чтобы добавить DebuggerStepThrough, DebuggerNonUserCode или DebuggerHidden, но если отладчик введен метод будет более чем переходить от кода к запуску кода, а затем использовать DebuggerStepperBoundaryAttribute.(В моей примерной программе F11 на Test 2 вы сразу попадаете в SomethingHorrible
, что потенциально хуже, чем прямо на выполнение (F5)). В нее добавлено явно добавленное контекстное переключение потоков, и за пределами этого я не знаю ни одного что это было бы полезно.
я могу себе представить, что может быть полезно, если у вас есть планировщик задач или нечто подобное, и вы достигли конца вашей задачи. Вместо того, чтобы возвращаться в ваш код фреймворка, он просто позволит задаче закончить и шипнуть в фоновом режиме. Но лично я не использовал его. – jessehouwing
Кажется очень запутанным для разработчика, который отлаживает. – usr
@usr вот что я подумал. – Daryl