Насколько я знаю (исправьте меня, если я ошибаюсь, пожалуйста), управляемые языки (или, по крайней мере, C#) не собираются делать segfault
(по крайней мере, когда нет Unsafe
или непосредственно занимаются unmanaged memory
). Это противоположно неуправляемому языку (или, по крайней мере, C++), где вы можете получить segfault
, просто взглянув на кошку рядом с вами на секунду во время кодирования.Как управляемый язык не гарантирует segfault
Вопрос: Каким образом обеспечивается соответствие этого языка? были построены и протестированы так тщательно. Или у них есть какой-то способ поймать этот segfault и справиться с ним так или иначе?
Мотивация позади этого вопроса: У меня есть приложение C#, которое вызывает родную библиотеку C++ (оба были созданы мной). Когда моя C++ DLL делает segfault, все приложение идет вниз (некоторые службы идут вниз), что совсем не хорошо. Я знаю, что при получении segfault это означает, что что-то было сделано неправильно и нужно исправить. Однако, по крайней мере, мне нужен какой-то механизм для решения этой проблемы, когда ошибка (может вызвать segfault). На компьютере клиента работает C++ DLL.
Если вы используете «небезопасную» DLL, которая может вылететь из строя, тогда эта авария приведет к уничтожению всей вашей программы, вы действительно не можете сделать этого. То, что вы * можете * сделать, сводит к минимуму влияние, отделяя основную программу от частей, которые используют небезопасную DLL. Таким образом, если DLL выйдет из строя, ваша основная программа все равно будет запущена, может обнаружить, что произошел сбой, и снова запустить отказоустойчивую программу. Однако, вероятно, проще и быстрее найти и исправить ошибку. –
@JoachimPileborg Я полностью с вами, что устранение проблемы - единственное логическое решение. Но я даже не могу взять журнал, чтобы узнать, что произошло. Самое лучшее сообщение журнала, которое у меня было. «Что-то не так с вашей программой»: D –
@HumamHelfawi Добавить внутренние записи и трассировки, записать в свой собственный файл журнала. По крайней мере, это может помочь сократить местоположение, если вы не можете использовать отладчик. –