Означает ли appcrash с STATUS_STACK_OVERFLOW в .Net приложении переполнение стека в собственном коде? - PullRequest
0 голосов
/ 25 октября 2018

Я получаю appcrash с кодом выполнения c00000fd (STATUS_STACK_OVERFLOW) в ntdll.dll.

Означает ли это, что переполнение стека где-то в нативном коде, вне моего управляемого кода?Потому что для управляемого кода у нас есть System.StackOverflowException.Но в моем случае их нет, и нет трассировки стека, которая могла бы дать подсказку.

1 Ответ

0 голосов
/ 25 октября 2018

Вы больше не можете поймать System.StackOverflowException

Начиная с .Net 2.0 их можно поймать только при следующих обстоятельствах.

  • CLR запускается вразмещенная среда, в которой хост специально разрешает обработку исключений StackOverflow
  • Исключение stackoverflow генерируется кодом пользователя, а не из-за фактической ситуации переполнения стека (Ссылка)

Хотя ошибка говорит о том, что она произошла в ntdll.dll , она, скорее всего, вызвана вашим кодом.

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

Второй идентификатор запускает отладку (присоединениеотладчик) и анализ этого класса метода, пока вы не найдете его.Скорее всего, из-за некоторой рекурсии, это первое место для поиска идентификатора.


Дополнительные ресурсы и ссылки

C # перехватывает исключение переполнения стека

Как найти источник StackOverflowException в моем приложении

Как отладить System.StackOverflowException без ссылки на исходный код?

Как предотвратить и / или обработать исключение StackOverflowException?

Как отладить исключение stackoverflow в .NET

Устранение неполадок исключений: System.StackOverflowException

StackOverflowException Class

В .NET Framework 1.0 и 1.1 вы можете перехватить объект StackOverflowException (дляНапример, для восстановления после неограниченной рекурсии).Начиная с .NET Framework 2.0, вы не можете перехватить объект StackOverflowException с помощью блока try / catch, и соответствующий процесс завершается по умолчанию.Следовательно, вы должны написать свой код для обнаружения и предотвращения переполнения стека.Например, если ваше приложение зависит от рекурсии, используйте счетчик или условие состояния для завершения рекурсивного цикла.

...