Кто юзает breakpad или другие инструменты для репортинга фатальных ошибок на Windows, скажите, пожалуйста: ваш инструмент детектит непойманные исключения в доп. потоках без необходимости модифицировать код потока (добавлять какие-то обработчики, set_terminate и т. п.)?
Кто юзает breakpad или другие инструменты для репортинга фатальных ошибок на Windows, скажите, пожалуйста: ваш инструмент детектит непойманные исключения в доп. потоках без необходимости модифицировать код потока (добавлять какие-то обработчики, set_terminate и т. п.)?
google breakpad, да. Другое дело, что за десять лет всего два раза случилось, что стектрейс помог найти хитрый баг. Ну и иногда такие дампы приходят, где главной проблемой указан крэш при создании брейкпадом дампа.
Мне минидампы регулярно помогают дебажить проблемы, причём в половине случаев крэши вообще не в моём приложении, а в shell extension, в видеодрайвере или в .dll антивируса.
Но вот почему-то внезапно перестали ловиться исключения из потоков, structured (SEH) exception не генерится, хотя раньше работало. Изучаю код breakpad.
Но вот почему-то внезапно перестали ловиться исключения из потоков, structured (SEH) exception не генерится, хотя раньше работало. Изучаю код breakpad.
нет, во-первых, ничего там не трогали, во-вторых, уже с лупой всё перепроверил. Во всех сценариях срабатывает unhandled exception handler, а в этом конкретном - исключение в потоке - срабатывает стандартный terminate handler, который тут же зовёт abort().
перешёл на vectored exception handler (VEH), с ним другая проблема - ловит ВСЕ исключения С++ до их попадания в catch, т. е. это абсолютно бесполезно
Почему это проблема? Если в вех интересно только определённое исключение а другие не надо, то можно вернуть EXCEPTION_CONTINUE_SEARCH, исключение дальше пойдёт искать обработчик во всякие сехи и плюсовые кетчи
Нашёл такой способ: поставить обработчик сигнала SIGABRT - до сегодняшнего дня я не знал, что в Windows есть этот API - и в обработчике вызвать MiniDumpWriteDump c null вместо EXCEPTION_INFO*. Но из-за этого null (я думаю, что из-за него) колл стек получается так себе, в нём уже нет того потока, который обвалил приложение.