Dans mon application, je gère SIGSEG pour produire un backtrace et appelez abort()
pour générer une image de base.Comment trouver quel thread a causé SEGFAULT dans une session gdb post-mortem?
Si j'exécute maintenant une analyse gdb-post-mortem du cœur, le thread qui a provoqué le SEGFAULT n'est plus visible. Y a-t-il quelque chose que je puisse faire alors je vois la cause du SEGFAULT?
Meilleures salutations, Martin
Effectuez-vous également d'autres tâches dans le gestionnaire? Pourquoi ne pas simplement laisser le système d'exploitation utiliser son comportement par défaut pour laisser un noyau pour vous? –
Juste en créant un backlog à stderr, puis en appelant abort(). –
Veuillez spécifier votre système d'exploitation et ce que vous observez exactement dans GDB. Sur Linux (et tous les autres UNIX auxquels je peux penser) le gestionnaire SIGSEGV s'exécutera dans le thread qui a causé SIGSEGV en premier lieu. Si ce dernier appelle abort(), le core dump contiendra ce thread en tant que thread # 1, et il n'y aura aucun problème pour trouver exactement quelle instruction et quelle pile d'appel a causé le problème. Puisque vous rencontrez des difficultés, vous êtes sur un système d'exploitation «étrange» ou vous ne décrivez pas correctement ce que vous observez. –