Метод, с которым я работаю и который называется десятки тысяч раз, в последнее время начал вызывать исключения. В большинстве случаев отладки я устанавливаю точку останова в верхней части этого метода и выполняю ее до тех пор, пока не достигну интересующего меня вызова со значением параметра, которое вызывает исключение. В этом случае это было бы нецелесообразно, поэтому я попытался установить точку останова с условием, которое будет прерываться только при появлении этого значения параметра. Я создал точку останова в позиции, указанной ниже, и дал ей условие str == "OffendingValue"
.
class Foo
{
// Bar() is called many, many times
void Bar(string str)
{
try
{
// Breakpoint inserted here
...
}
catch (Exception ex)
{
...
}
}
}
К моему удивлению, из-за этого Visual Studio и мое приложение перестали работать в режиме отладки. Мое приложение запустилось и вывело несколько простых сообщений, но потом перестало отвечать полностью. Думая, что Visual Studio может работать немного медленнее из-за дополнительной работы, которую он должен выполнять для контроля состояния точки останова, я отступил от своего стола на 15 минут, чтобы дать ему некоторое время для запуска. Когда я вернулся, не было никаких изменений. Я могу воспроизвести условие, удалив точку останова и воссоздав ее с тем же условием. Самое странное, что команда отладки Break All, которая обычно прерывает выполнение программы в операторе, который в данный момент ожидает, является ли она точкой останова, или вообще ничего не делает, когда у меня включена эта проблемная точка останова.
Кто-нибудь сталкивался с подобным поведением в условиях точки останова Visual Studio? Я могу использовать условия Hit Count без проблем.