Я видел Получение обратного следа другого потока , но он не содержал много практической информации.
Я хочу иметь возможность перехватывать SIGSEGV в многопоточном приложении C с использованием потоков POSIX, работающих в Linux (ядро CentOS, 2.6), и печатать трассировку стека потока, который его вызвал. Конечно, не зная, какой поток вызвал его, хорошо для меня (tm), чтобы основной поток, который перехватил сигнал, перечислил все потоки и просто напечатал трассировку стека всех из них.
Там было отмечено, что, возможно, libunwind может быть использовано для этого, но в документации его нет, и я не смог найти хороший пример того, как его использовать для этой цели. Кроме того, мне стало интересно, оказывает ли оно существенное влияние на производительность или другое влияние, а также проверено ли оно в боевых условиях и используется ли в рабочем коде, или оно в основном используется только для отладки и разработки, а не в производственных системах.
Есть ли у кого-нибудь пример кода, использующего libunwind или другой достаточно простой (например, не пишущий его в сборке) способ сделать это?