Подтвердить что ты не робот

Отладка Visual Studio - игнорировать исключение в одном месте при взломе в другом месте?

У меня есть код, который генерирует большое количество аргументов ArgumentExceptions на одной конкретной строке (которая находится в другом коде разработчика, поэтому я не могу ее просто изменить), которые затем захватываются и обрабатываются соответствующим образом.

Я пытаюсь отлаживать аргументы ArgumentExceptions, которые происходят в другом разделе кода (и затем их захватывают и обрабатывают, поэтому я не могу просто смотреть на необработанные исключения).

Есть ли какой-то способ игнорировать аргументы ArgumentExceptions, происходящие из этой конкретной другой строки кода, но все еще ломая ArgumentExceptions, которые выбрасываются в другом месте?

4b9b3361

Ответ 1

Возможно, вы сможете это сделать, но это зависит от того, как код, который вы хотите отлаживать, расположен относительно другого кода разработчика, и можете ли вы изменить (но не зафиксировать свои изменения) в свой код.

Первое, что вам нужно сделать, - по крайней мере временно, перейти в меню Инструменты → Параметры → Отладка в Visual Studio и пометить поле "Только мой код". Я предполагаю, что это доступно даже в Express-изданиях, но это может быть не так, и если это не доступно для вас, я боюсь, что остальное, что я могу сказать, вероятно, не поможет.

В любом случае, после того, как вы отметите этот флажок, вы больше не будете видеть уведомления о брейке-броске для кода, который не является "вашим". Это означает код, который находится из сборки не в вашем .sln, или код, помеченный атрибутом [DebuggerNonUserCode] из System.Diagnostics. То, что я обычно делаю тогда, временно украшает методы оскорбления с помощью [DebuggerNonUserCode], пока я не буду отлаживать то, что мне нужно для отладки, а затем вернет эти изменения, прежде чем проверять контроль доступа.

Это не так изящно, как хотелось бы (мне бы понравился флажок "Никогда не ломайте броски с этого сайта снова" в помощнике по устранению), но это лучше, чем ничего.

Я считаю, что могут быть другие настройки отладчика, которые могут взаимодействовать с тем, как работает "Just My Code", поэтому, если это не помогает, сообщите мне, и я попытаюсь получить более точное представление о том, что мои настройки выглядите, когда я это делаю.

Ответ 2

Если вы говорите о функции исключения Break On Throw, тогда нет. Это только функция, основанная на типе, и не имеет никакого способа контролировать, какой раздел кода генерирует исключение.

Лучше всего просто разместить точки останова на всех строках, которые бросают или временно приостанавливают выброс исключения из одного места, которое вас волнует.

Ответ 3

Если вы знаете, как вы его вызываете, я бы установил точку останова в вашем коде, а затем шагнул туда (F11). Вы могли бы также надуть программиста, пока они не исправят свой код, что может заставить вас чувствовать себя лучше (если вы не пацифист), и, возможно, у них не будет столько аргументов ArgumentExceptions в их коде (что, вероятно, заставит вас чувствовать себя лучше даже если вы пацифист).

Ответ 4

Звучит как использование исключений в качестве управления потоком. Если тот, который вы пытаетесь отладить, происходит позже в программе, вы можете попытаться присоединить отладчик позже, или вы можете подождать, пока программа не будет запущена, чтобы включить разбиение при вызове ArgumentException.

Попытайтесь также ограничить область - если исключение, которое вас интересует, происходит, но не является точно ArgumentException, перерыв на этом.

Сообщите другому разработчику исправить его код.

Изменить: В .NET 4 вы можете прикрепить обработчик к AppDomain.FirstChanceException event, filter исключить исключение исключений из ArgumentException и отфильтровать плохое значение на основе стека вызовов.

Ответ 5

Ссылки в комментариях замечательные.

Я думаю, что условные точки останова - вот что вы ищете здесь. Вы можете сделать это, щелкнув правой кнопкой мыши точку останова и щелкнув пункт меню "Условие...".