J'ai un programme C++ multithread qui se bloque dans certains cas rares. Le problème est difficile à reproduire et je ne peux le faire que sur une machine distante. La méthode que je souhaite utiliser pour résoudre ce problème est la suivante
- exécuter le programme
- attendre l'impasse
- lui envoyer un signal d'abandon pour générer un core dump
- copier le dumping sur ma machine locale
- utiliser gdb pour le déboguer
Je n'ai pas gdb sur la machine distante et je ne peux rien y installer. Le problème est que lorsque je débogue le core dump (obtenu à partir d'un processus bloqué ou en cours d'exécution sur la machine distante), le back-trace de la plupart des threads ne montre que :
(gdb) bt
#0 pthread\_cond\_wait () at ../nptl/sysdeps/unix/sysv/linux/x86\_64/pthread\_cond\_wait.S:261
#1 0x0000000000000000 in ?? ()
J'utilise un binaire lié statiquement qui est compilé avec les options "-g -O1". Lorsque j'interromps un processus du même binaire sur ma machine locale, gdb peut extraire la pile entière du core dump et il n'y a pas de problème de ce type (je ne peux cependant pas reproduire le blocage). Ma machine distante est SLES et ma machine locale est ubuntu.
Une idée ?
Editer :
J'ai trouvé quelqu'un d'autre avec le même problème, mais toujours pas de solution : http://groups.google.com/group/google-coredumper/browse_thread/thread/2ca9bcf9465d1050 (Je n'utilise pas google coredumper, mais il semble que google coredumper échoue avec la même erreur, ce qui suggère que le problème vient peut-être de SLES 11).