Я пытаюсь отслеживать сбой, который случается, когда я подчеркиваю свой код C# и работаю в условиях низкой памяти. Однако в некоторых случаях вместо получения OutOfMemoryException моя программа просто сбой и выход. Обычно это происходит из-за повреждения памяти из-за превышения буфера или из-за переполнения стека (или повреждения).Проверка целостности кучи и размера стека в C#
Итак, есть способ запустить проверку целостности кучи, или есть способ проверить, сколько стека осталось в потоке?
Я использую много небезопасного кода по соображениям скорости, поэтому вполне вероятно, что у меня есть код, искажающий память где-то. К сожалению, авария происходит случайно, после того, как происходит коррупция. Я понимаю, что C# закрывает приложение, когда обнаруживает переполнение буфера, но есть ли способ заставить его сделать чек?
Спасибо.
Выходит ли он без каких-либо исключений? Пробовали ли вы компиляцию и тестирование как в режиме выпуска, так и в режиме отладки? То, что вы хотите, - это диалоговое окно, сообщающее вам, например. «необработанное исключение» или «ошибка сегментации» или что-то подобное, чтобы дать вам ключ. – csl
Да, он просто выходит без каких-либо исключений. Я тестировал как в режимах выпуска, так и в режиме отладки. Нет разницы. Вы можете получить аналогичный сбой, используя stackalloc, чтобы запросить гораздо больше памяти из стека, а затем фактически доступен. То есть вы не получаете исключение переполнения стека, программа просто выходит. Обратите внимание, что этот сбой ТОЛЬКО происходит в условиях низкой памяти. Так что, возможно, это не коррупция. Возможно, что-то вроде JIT исчерпывает память и вызывает этот выход. – AZDean
Также обратите внимание, что мне пришлось отключить автоматическую настройку виртуальной памяти, чтобы принудительно установить условие низкой памяти. Другими словами, я действительно заставляю его исчерпывать память. Я читаю о «ограниченной области выполнения», но я не вижу, как это мне поможет. Эта проблема приводит к сбою моей программы в непредсказуемых точках кода повсюду. Я не могу сделать всю свою программу CER. – AZDean