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

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

12.05.2012 02:08:50 Просмотров 37 Источник

В многопоточной программе какой-то поток выполняет недопустимую операцию и ядро присылает сигнал SEGMENTATION FAULT. Я хочу посмотреть стек этого потока на момент выполнения недопустимой операции.

Подскажите, пожалуйста, каким образом это можно сделать. Я подозреваю, в обработчике сигнала можно что-то сделать, но вот что?

В принципе можно получить идентификатор потока при помощи функции pthread_self() и каким-нить образом достать стек этого потка...

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/109681/%d0%9a%d0%b0%d0%ba-%d0%bf%d0%be%d0%bb%d1%83%d1%87%d0%b8%d1%82%d1%8c-%d1%81%d1%82%d0%b5%d0%ba-%d0%bf%d0%be%d1%82%d0%be%d0%ba%d0%b0-%d0%ba%d0%be%d0%b3%d0%b4%d0%b0-%d0%bf%d1%80%d0%b8%d1%85%d0%be%d0%b4%d0%b8%d1%82-%d1%81%d0%b8%d0%b3%d0%bd%d0%b0%d0%bb-segmentation-fault#comment109696_109681
core dump, а на него натравить gdb.

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

Является ответом!
kkvt

12.05.2012 03:57:25

А какие у вас ограничения? Вы не можете воспользоваться gdb?

что-то типа

$ulimit -c unlimited
$./your_prog
$gdb -c core ./your_prog
gdb> bt

или вообще посмотреть прямо в gdb где все падает?

margosh

14.05.2012 10:25:43

После запуска gdb набираем :

 gdb> thread apply all bt full

Получаем стек выполнения для каждого запущенного потока плюс указание на то, в какой функции все завалилось.

Закрыть X