Если у вас нет sighandler для SIGEGV с alt stack, что является особым случаем, просто используйте strace.
strace -f myprogram
(мужчина)
(нам нужен флаг -f, потому что потоки всегда являются глобальной областью действия в Linux. Например, ~ procs, которые работают в одной и той же памяти)
Вот пример выходных данных, показывающий поток, завершившийся до сбоя.
Я выделил интересную часть ...
Клон (
Процесс 28757 прилагается
child_stack = 0x7fc1fc319ff0, флаги = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM | CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID, parent_tidptr = 0x7fc1fc31a9e0, 0x7fc1fc31a710 = TLS, child_tidptr = 0x7fc1fc31a9e0) = 28757
[pid 28756] rt_sigprocmask (SIG_BLOCK, [CHLD],
[pid 28757] set_robust_list (0x7fc1fc31a9f0, 0x18
[pid 28756] <... rt_sigprocmask возобновлен> [], 8) = 0
[pid 28757] <... set_robust_list возобновлен>) = 0
[pid 28756] rt_sigaction (SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
[pid 28757] madvise (0x7fc1fb91a000, 10465280, MADV_DONTNEED
[pid 28756] rt_sigprocmask (SIG_SETMASK, [],
[pid 28757] <... madvise возобновлен>) = 0
[pid 28756] <... rt_sigprocmask возобновлен> NULL, 8) = 0
[pid 28757] _exit (0) =?
Процесс 28757 отсоединен
nanosleep ({1, 0}, 0x7fffce29c4b0) = 0
rt_sigprocmask (SIG_UNBLOCK, [ABRT], NULL, 8) = 0
tgkill (28756, 28756, SIGABRT) = 0
--- SIGABRT (Прервано) @ 0 (0) ---
+++ убит SIGABRT (ядро сброшено) +++
Прервано (ядро сброшено)
Теперь выполните grep в выходных данных и убедитесь, что число подключенных и отключенных.
Если у вас действительно есть живые потоки на выходе (сбой), я бы создал запись bugzilla (первый поиск bugzilla ofc).