Ошибка: целевой процесс завершился с кодом "code" при вычислении функции "function"
Полный текст сообщения: целевой процесс завершился с кодом "code" при оценке функции "функция".
Чтобы упростить проверку состояния для объектов .NET, отладчик автоматически выполняет дополнительный код в отлаживаемом процессе (обычно это методы получения свойств и функции ToString
). В большинстве сценариев эти функции выполняются успешно или вызывают исключения, которые обрабатываются отладчиком. Но в некоторых обстоятельствах исключения невозможно перехватить: например, они пересекают границы ядра, требуют передачи сообщений пользователю или являются неустранимыми. В таком случае метод получения свойств или метод ToString, в котором выполняемый код явным образом завершает процесс (например, вызывает ExitProcess()
) или создает необработанное исключение (например, StackOverflowException
), автоматически завершает отлаживаемый процесс и весь сеанс отладки. Если вы увидите указанное выше сообщение об ошибке, значит возникла именно такая ситуация.
Одна из распространенных причин возникновения этой проблемы связана с тем, что отладчик пытается вычислить свойство, которое вызывает само себя, и это может привести к исключению переполнения стека. Исключение переполнения стека является неустранимым, поэтому процесс отладки завершается.
Исправление ошибки
Для этой проблемы есть два возможных решения.
Решение #1. Запретить отладчику вызывать свойство getter или метод ToString
В сообщении об ошибке будет указано имя функции, которую отладчик пытался вызвать. Используя это имя функции, попробуйте повторно вычислить ее значение в окне Интерпретация, чтобы отладить вычисление. При вычислении в окне Интерпретация отладка не завершается, так как отладчик в этом случае прерывает работу по необработанным исключениям, в отличие от неявных вычислений в окнах Видимые, Локальные, Контрольные значения.
Если вы можете изменить эту функцию, запретите отладчику вызвать метод получения свойств или метод ToString
. Выполните одно из следующих действий.
- Укажите в методе любой другой тип кода, кроме метода получения свойств и метода ToString, и проблема исчезнет. –или–
- (Для
ToString
) Определите для типа атрибутDebuggerDisplay
, чтобы отладчик мог вычислить другое значение, кромеToString
. –или– - (Для метода получения свойства) Установите для свойства атрибут
[System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never)]
. Это может быть полезно, если какой-то из ваших методов должен оставаться свойством для обеспечения совместимости с API, хотя по сути является настоящим методом.
Если вы не можете изменить такой метод, возможно получится прервать целевой процесс по другой инструкции и повторить попытку вычисления.
Решение #2. Отключение всех неявных вычислений
Если ни одно из предыдущих решений не устраняет проблему, перейдите в раздел Средства>Параметры и снимите флажок Отладка>Общие>Включить вычисление свойства и другие неявные вызовы функций. Это отключит большинство неявных вычислений функций, что должно устранить проблему.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по