Почему TargetInvocationException рассматривает как непойманный IDE?

, чтобы избежать предупреждения, вы должны сделать что-то подобное

if(isset($args['myargs']['custom_value'])) {
  if (is_numeric($args['myargs']['custom_value'])) {
      echo 'Yes';
  } else {
      echo 'No';
  }
}
25
задан Peter Mortensen 22 December 2016 в 19:45
поделиться

2 ответа

1117 Это похоже на «замысел». Происходит следующее: у вас, скорее всего, есть меню Инструменты Параметры Отладка Общие Включить только мой код включен.

Как Как: разбить пользовательские необработанные исключения утверждает:

Диалог Отладка Исключения показывает дополнительный столбец (Разрыв, когда исключение не обрабатывается пользователем), когда включен параметр «Включить только мой код».

По сути, это означает, что всякий раз, когда исключение выходит за границы вашего кода (и в этом случае оно падает до кода отражения платформы .NET), Visual Studio ломается, потому что считает, что исключение ушло код пользователя. Он не знает, что он вернется в код пользователя позже в стеке.

Таким образом, есть два обходных пути: Отключите Just My Code в меню Инструменты Параметры Отладка Общие или Снимите флажок из необработанных исключений .NET Framework в меню Отладка Исключения .

30
ответ дан 3 revs, 2 users 62% 28 November 2019 в 21:32
поделиться

РЕДАКТИРОВАТЬ: Я только что пробовал это сам, и похоже, что отражение обрабатывается немного по-другому. Вы можете думать о вызове отражения как о запуске нового уровня «обрабатываемого» в том, что касается отладчика: ничто не перехватывает это исключение до того, как оно будет преобразовано и повторно создано как TargetInvocationException , поэтому оно прерывается in. Я не знаю, есть ли способ воспрепятствовать этому, но случается ли это очень часто? Если вы регулярно выполняете множество операций, которые приводят к исключениям, вы можете пересмотреть свой дизайн.


Исходный ответ

Зайдите в Debug / Exceptions ... и посмотрите, что это за настройки. Вы увидите такое поведение, если для TargetInvocationException (или чего-либо более высокого в иерархии) установлен флажок «Выброшено».

4
ответ дан 28 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

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