Поймать фатальные исключения из неуправляемого кода - PullRequest
0 голосов
/ 07 февраля 2020

В настоящее время нет способа (по крайней мере, я не нашел способ) перехватить фатальные исключения (такие как переполнение стека, Segfault, ..) с помощью блока try-catch.

Я уже начал выпускать at. net основной репозиторий, так что более подробную информацию вы можете прочитать там (https://github.com/dotnet/core/issues/4228)

Что я пытаюсь сделать, это сделать приложение не cra sh, когда в загруженном неуправляемом коде есть любое переполнение сегмента / ошибка стека / любое фатальное исключение. теперь происходит следующее: NET CLR убивает мое приложение, если происходит какая-либо фатальная ошибка.

Пример: в c# управляемый код загружает внешний c ++ dll через функцию ядра LoadLibrary. Предположим, что dll специально создан для проверки надежности, поэтому, когда вызывается указанная c функция, она вызывает ошибку segault (например, пытается получить данные за пределами границ массива). Когда эта ошибка происходит, она перехватывается. net CLR и сразу же убивает вызываемый управляемый c# код (приложение).

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

Есть ли что-то, что я пропустил / забыл, или что-то, что я могу сделать, чтобы иметь возможность сообщить, когда это происходит без моего приложение умирает? Или это просто текущая ошибка (/ feature? :)) без каких-либо обходных путей.

Спасибо за любую помощь.

...