Почему это поймало бы весь блок не, на самом деле ловят все

Последние версии Docker используют новую функцию хранения учетных данных, в которой есть ошибка , при которой выполнение docker login с URL-адресом, который указывает протокол, приведет к ошибкам истечения срока действия токена. Эта проблема будет исправлена ​​в Docker 1.13.

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

Таким образом, в блоке команд, возвращаемом aws ecr get-login:

docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com

Должен быть заменен следующим:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com

Пропуск https:// должен заставить докер работать на время будучи.

7
задан Ralph Shillington 25 May 2009 в 12:30
поделиться

5 ответов

When you don't specify what to catch, it defaults to .NET exceptions. Your exception is in COM where .NET isn't set to catch the exception. The best way to deal with this is to catch the COM exception, which should look something like this:

    try
    {

    }
    catch (System.Runtime.InteropServices.COMException COMex)
    {

    }
    catch (System.Exception ex)
    {

    }
13
ответ дан 6 December 2019 в 08:45
поделиться

Есть три причины:

  1. Ошибка во время выполнения.
  2. Приложение и / или поток завершаются как часть выполняемого кода.
  3. Вы не видите всей картины

Лично я голосую за 3, и у меня было бесчисленное количество сеансов отладки, когда мне интересно, почему какой-то фрагмент кода не обрабатывает мои исключения, когда на самом деле это была Visual Studio. был настроен так, чтобы останавливаться при всех сгенерированных исключениях, независимо от того, были ли они перехвачены или нет.

Вы пробовали просто попросить программу продолжить работу в отладчике и посмотреть, попадает ли она затем в блок catch?

Кроме того, проверьте параметр в Visual Studio, перейдите в диалоговое окно «Отладка-> Исключения» и проверьте, установлен ли какой-либо из флажков Выброшенных. Если да, то это может быть вашей проблемой.

Конечно,

3
ответ дан 6 December 2019 в 08:45
поделиться

Наряду с COMException существуют также асинхронные исключения, которые НЕ перехватываются, например:

  • OutOfMemoryException
  • StackoverflowException (нет, это не шутка, связанная с этим сайт :))
  • ThreadAbortException

Вы уверены, что это не так?

2
ответ дан 6 December 2019 в 08:45
поделиться

Исключение COMException, созданное из этого блока try, будет перехвачено и поглощено блоком catch.

Сделайте перерыв, налейте себе кофе, поставьте точку останова в строке «Logger.Error ...» и повторите попытку.

2
ответ дан 6 December 2019 в 08:45
поделиться

У меня была аналогичная проблема. Я вызывал COM-объект VB6, который вызвал ошибку. Фактическим типом исключения оказался System.Reflection.TargetInvocationException. Для innerException установлено исключение COMException. В итоге я перехватил System.Reflection.TargetInvocationException и проверил внутреннее исключение

1
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: