Я работаю над довольно большой базой кода. Поскольку он не всегда поддерживается лучшим, иногда исключения используются из потока управления или по другим причинам. И бывают случаи, когда это почти неизбежно. Например, как еще вы проверяете, является ли файл допустимым .ico-изображением, отличным от того, чтобы передать его как изображение и посмотреть, не вызывает ли это исключение?
Я реорганизую такие вещи, где могу, но много раз это слишком дорого для рефакторинга для небольшого выигрыша. Эти фиктивные исключения становятся крайне раздражающими при отладке. Мы улавливаем все исключения, чтобы избежать сбоев в работе нашей программы, и улавливаем большинство исключений и отображаем что-то более удобное для пользователя. Таким образом, при отладке, если какой-то фрагмент кода генерирует ApplicationException
, может быть 50 исключений этого типа, которые будут выброшены, прежде чем мы, наконец, перейдем к фактической ошибке. В большинстве случаев эти фиктивные исключения сфокусированы вокруг одной части кода (много раз одна строка). Можно ли каким-либо образом заставить Visual Studio игнорировать исключения, выведенные из этой строки, но все же остановиться на исключении, которое является реальной проблемой? Или есть что-то еще, что я могу сделать, чтобы предотвратить такое отладочное разочарование?
Чтобы проиллюстрировать мою проблему, представьте себе что-то вроде этого:
for(int i=0; i<foo; i++)
{
try
{
FooBar(i); //this function throws NullReferenceException sometimes
}catch {} //ignore it because we don't care if it failed
}
....
var tmp=Bar as FooType; //this cast fails so tmp is null
tmp.Meh(); //throws exception here. This is a bug, we should've checked for null
Если вы хотите выяснить, где находится NullReference, вы в основном удерживаете F5 до тех пор, пока не пройдете вызовы FooBar
. Это в лучшем случае раздражает и довольно склонно к ошибкам