Доброе утро,
Я столкнулся с сбоем в моем приложении. Когда пользователь пытается запустить его, он ждет как минуту, а затем возникает исключение std ::. На самом деле я не мог воспроизвести ошибку самостоятельно, но это кажется довольно распространенной проблемой.
Единственное, что я мог отследить, это следующая строка в системном журнале:
Ошибка в клиенте libdispatch: отслеживаемый ресурс kevent [EVFILT_MACHPORT] исчез до того, как был вызван обработчик отмены источника
Затем я начинаю гуглить и не могу найти гораздо больше … Я могу только «предположить», что это какая-то проблема с НОД (что я не использую afaik, или, по крайней мере, не напрямую …). В интернете я увидел, что это связано с MacOSX Sierra. Но большинство форумов не имеют ответа, просто много попыток без уникального результата. Возможно, единственная веб-страница, которая кажется немного ясной об обходном пути (которую я не проверял, и в любом случае я не хочу использовать), этот.
Так…:
Это сообщение в журнале libdispatch не является фатальным и почти наверняка не связано с вашим сбоем, который звучит как прерывание из-за необработанного исключения C ++ (без аварийного отчета / обратного отслеживания трудно сказать что-либо еще). libdispatch не генерирует никаких исключений C ++ FWIW.
Что касается значения этого конкретного сообщения журнала, оно относится к следующему разделу man-страницы dispatch_source_create (3):
ОТМЕНА:
Важно: обработчик отмены требуется для файлового дескриптора и источников на основе портов MAC в порядке
безопасно закрыть дескриптор или уничтожить порт. Закрытие дескриптора или порта до запуска обработчика отмены может привести к состоянию гонки: если новый дескриптор назначен с тем же
значение как недавно закрытый дескриптор, пока обработчик события источника все еще работает, событие
Обработчик может читать / записывать данные в неправильный дескриптор.
Если вы видите «исчезнувшее» сообщение журнала EVFILT_MACHPORT, кто-то в вашем процессе нарушил этот контракт API и освободил мачпорт, в то время как источник отгрузки все еще отслеживал его (в результате чего ядро сгенерировало kevent EV_VANISHED), см. исходный код.
Других решений пока нет …