Игнорирование блока try в программе командной строки C # - PullRequest
3 голосов
/ 08 января 2009

У меня есть программа командной строки на C #, которую я обернул блоком try-catch, чтобы не допустить сбоя консоли. Тем не менее, пока я отлаживаю его, если где-то в методе DoStuff () выдается исключение, Visual Studio прервет выполнение оператора catch Я хочу, чтобы Visual Studio сломался там, где произошло исключение. Какой лучший способ сделать это?

Прокомментируйте попытку?
Настройка в Visual Sudio?
#If оператор DEBUG?

static void Main(string[] args)
{
    try
    {
        DoStuff();
    }
    catch (Exception e)
    {  //right now I have a breakpoint here
        Console.WriteLine(e.Message);
    }
}

private void DoStuff()
{
    //I'd like VS to break here if an exception is thrown here.
}

Ответы [ 4 ]

8 голосов
/ 08 января 2009

Вы можете включить Исключения первого шанса в VS. Это позволит вам получать уведомления, как только возникнет исключение.

4 голосов
/ 08 января 2009

Я думаю, что установка VS на перерыв на необработанные исключения и завершение try / catch в ifdefs - вот как я бы это сделал.

1 голос
/ 08 января 2009

Вот как я это делаю для консольных инструментов, работающих на сервере непрерывной интеграции:

private static void Main(string[] args)
{
  var parameters = CommandLineUtil.ParseCommandString(args);

#if DEBUG
  RunInDebugMode(parameters);
#else
  RunInReleaseMode(parameters);
#endif
}


static void RunInDebugMode(IDictionary<string,string> args)
{
  var counter = new ExceptionCounters();
  SetupDebugParameters(args);
  RunContainer(args, counter, ConsoleLog.Instance);
}

static void RunInReleaseMode(IDictionary<string,string> args)
{
  var counter = new ExceptionCounters();
  try
  {
    RunContainer(args, counter, NullLog.Instance);
  }
  catch (Exception ex)
  {
    var exception = new InvalidOperationException("Unhandled exception", ex);
    counter.Add(exception);
    Environment.ExitCode = 1;
  }
  finally
  {
    SaveExceptionLog(parameters, counter);
  }
}

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

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

PS: ExceptionCounters, ConsoleLog и т. Д. Взяты из общих библиотек Lokad

1 голос
/ 08 января 2009

Есть опция «Разбить на все исключения». Я не уверен, какую версию VS вы используете, но в VS 2008 вы можете нажать Ctrl + D, E. Затем вы можете установить флажок «Брошенный» для типов исключений, которые вы хотите разбить на

Я полагаю, что в предыдущих версиях VS был пункт меню «Отладка» с эффектом «Разбить на все исключения». К сожалению, у меня нет предыдущей версии под рукой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...