/ / Visual Studio се държи странно, докато отстранява грешки в условията на прекъсване - визуално студио, отстраняване на грешки

Visual Studio се държи странно при отстраняване на грешки при условия на прекъсване - визуално студио, отстраняване на грешки

Метод, с който работя, се нарича десеткихиляди пъти започнаха да хвърлят изключения наскоро. При повечето случаи на отстраняване на грешки бих задал точка на прекъсване в горната част на този метод и ще пробягам, докато не достигна обаждането, което ме интересува със стойност на параметър, която задейства изключението. В този случай това би било непрактично, затова се опитах да настроя a точка на прекъсване с условие, което ще се счупи само когато се появи тази стойност на параметъра. Създадох точка на прекъсване в позицията, посочена по-долу, и я дадох условие 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.

Отговори:

7 за отговор № 1

По всяко време се опитвам да използвам условноточки на прекъсване във Visual Studio Аз имах същия проблем. Отладчикът работи толкова бавно, че става безполезен. Вместо това аз временно добавям команда if в кода и добавям своята точка на прекъсване вътре в това. Това не е толкова удобно, но кодът се изпълнява с нормално темпо и той върши работата.

class Foo
{
// Bar() is called many, many times
void Bar(string str)
{
try
{

if(str == "condition")
{
int i = 0;   // Breakpoint inserted here
}
...
}
catch (Exception ex)
{
...
}
}
}

2 за отговор № 2

Ако знаете каква е нарушаващата стойност, не можете ли просто да напишете единичен тест за този метод и да отстраните грешката си по този начин?

Ако не, ако знаете изключението, можете да настроите дебъгъра си да се прекъсне, когато това изключение бъде хвърлено. Отидете на Debug | Изключения и проверете Thrown за въпросното изключение.


0 за отговор № 3

Чудя се дали получавате препълване на стека. Проследява ли VS всички стойности за str или нещо общо с всяко състояние на Bar? Ако е така, хилядите копия могат да се добавят.

Чудя се дали бихте могли да елиминирате проблема, като наблюдавате стойността чрез глобална променлива, а не една във функцията.