Одна из проблем, с которой мы время от времени сталкиваемся, — это ошибки сегментации (SIGSEGV) в собственном коде Android.
Недавно мы поняли, что подавляющее большинство наших ошибок сегментации происходит из-за «поддельных» телефонов, которые лгут об их возможностях Vulkan.
Чтобы снизить предполагаемую частоту сбоев, мы начали устанавливать обработчик сигнала перед инициализацией Vulkan, чтобы мы могли определить, когда оборудование физически не может обрабатывать рендеринг.
После теста запуска мы «сбрасываем» обработчик сигнала с помощью std::signal(SIGSEGV , SIG_DFL);
По какой-то причине все события SIGSEGV после сброса выдают сигнал SIGABRT (прерывание) таким образом, что уничтожается стек и его очень трудно определить:< /p>
- Это была ошибка сегментации, вызвавшая сбой.
- Какой код запускался, что вызвало ошибку сегментации
- Какой код выполнялся, что вызвало ошибку сегментации
li>
Есть ли у кого-нибудь информация по этому поводу? Может ли помочь установка обработчика null_ptr вместо SIG_DFL?
Подробнее здесь: https://stackoverflow.com/questions/791 ... se-sigabrt