0

Я использовал условную компиляцию, чтобы позволить мне легко отлаживать (удалив блок catch try) с производственным кодом. Причина, по которой я это делаю, заключается в том, что визуальная студия (очевидно) покажет местоположение исключения, которое было выбрано как блок catch самого верхнего обработчика. Это, к сожалению, не позволяет отлаживать или, по крайней мере, определять точное местоположение ошибки до удаления обработчика.Условная компиляция для catch catch

Вот пример моего нынешнего подхода

private void btnConnect_Click(object sender, EventArgs e) 
    { 
#if DEBUG 
     DoSomething(); 
#else 
     try 
     { 
      DoSomething(); 
     } 
     catch (Exception ex) 
     { 
      Logger.Log(ex); 
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      CleanUp(); 
     } 
#endif 
    } 

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

Я рассмотрел подход, в котором я бы использовал lambdas для создания настраиваемого обработчика блока catch try, который внутренне использует условную компиляцию для обработки или восстановления такого исключения.

void TryCatchFinally(Action tryBlock, Action<Exception> catchBlock, Action finallyBlock) 
    { 
#if DEBUG 
     tryBlock.Invoke(); 
     finallyBlock.Invoke(); 
#else 
     try 
     { 
      tryBlock.Invoke(); 
     } 
     catch (Exception ex) 
     { 
      catchBlock.Invoke(ex); 
     } 
     finally 
     { 
      finallyBlock.Invoke(); 
     } 
#endif 
    } 

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

Кто-нибудь нашел хороший подход к этому вопрос или может кто-нибудь подумать об улучшении моей версии?

ответ

2

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

Знаете ли вы, что вы можете настроить Visual Studio на разрыв при вызове исключения без необходимости использования разных кодов кода?

Debug-> Exceptions-> Проверить «Брошенный»

Если я правильно понял вопрос - то это решает проблему для отладки в VS.

+0

Мальчик, я чувствую себя глупо. Нет, я не ... –

+0

Эй, это случается :) Я использовал VS, так как он впервые вышел, и если я честен, все еще есть ряд вариантов, которые я никогда не расследовал! –

Смежные вопросы