Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Как получить стек потока, когда приходит сигнал SEGMENTATION FAULT?

#c #unix #cpp #linux


В многопоточной программе какой-то поток выполняет недопустимую операцию и ядро присылает
сигнал SEGMENTATION FAULT. Я хочу посмотреть стек этого потока на момент выполнения
недопустимой операции.
Подскажите, пожалуйста, каким образом это можно сделать.
Я подозреваю, в обработчике сигнала можно что-то сделать, но вот что?
В принципе можно получить идентификатор потока при помощи функции pthread_self()
и каким-нить образом достать стек этого потка...     


Ответы

Ответ 1



А какие у вас ограничения? Вы не можете воспользоваться gdb? что-то типа $ulimit -c unlimited $./your_prog $gdb -c core ./your_prog gdb> bt или вообще посмотреть прямо в gdb где все падает?

Ответ 2



После запуска gdb набираем : gdb> thread apply all bt full Получаем стек выполнения для каждого запущенного потока плюс указание на то, в какой функции все завалилось.

Комментариев нет:

Отправить комментарий