*** glibc détecté *** perl: double gratuit ou la corruption (!prev): 0x0c2b7138 ***
Lors de l'exécution d'un programme en perl, j'ai rencontré l'erreur suivante
*** glibc détecté *** perl: double gratuit ou la corruption (!prev): 0x0c2b7138 *** /lib/tls/i686/cmov/libc..6[0xb7daea85] /lib/tls/i686/cmov/libc..6(bgratuit+0x90)[0xb7db24f0] perl(Perl_pregfree+0x3e)[0x80a004e] perl(perl_destruct+0xcf1)[0x806b711] /usr/local/lib/perl/5.8.8/auto/threads/threads.donc[0xb79d2dfb] /usr/local/lib/perl/5.8.8/auto/threads/threads.donc[0xb79d2f9b] /usr/local/lib/perl/5.8.8/auto/threads/threads.donc[0xb79d5fbb] /lib/tls/i686/cmov/libpthread..0[0xb7e974fb] /lib/tls/i686/cmov/libc..6(clone+0x5e)[0xb7e19e5e]
Mon OS est Ubuntu 8.04, Perl version 5.8.8
Mes scripts contient les discussions ... je ne peux pas partager le code, mais je voulais savoir si quelqu'un a eu une expérience avec ce type d'erreurs et comment tu avais résolu/approchées ou pour analyse. Existe-il des outils/logs que j'ai pu consulter en outre de travailler sur ce genre de questions.
Je vous remercie pour votre soutien.
P. S: je sais que les fils ne sont pas l'idéal amis pour tout le monde. Cependant je n'ai pas de décision de contrôle de l'utilisation de perl. Je suis juste à maintenir le code.
OriginalL'auteur kingpin | 2009-05-19
Vous devez vous connecter pour publier un commentaire.
ouvrir votre code et y mettre les quelque part avant d'où le problème se produit:
Puis exécutez
et frapper
à plusieurs reprises jusqu'à ce que le problème se reproduit. ( En gardant la note de savoir s'il s'arrête à votre manuel de point d'arrêt, ou pas avant d'échouer ).
Ensuite itérativement déplacer le point d'arrêt manuel en avant/en arrière jusqu'à ce que vous l'avez juste avant votre point de terminaison ( vous pourriez les trouver le point mort avec un tas de commandes d'impression aussi ), et puis essayer de travailler à partir de là, peut-être avec pré-crash de l'introspection.
Ce sera (je l'espère) de vous aider à générer un test qui expose le problème.
OriginalL'auteur Kent Fredric
Ce fil sur le perl5 porteurs liste de diffusion, ce qui semble indiquer que c'est un problème connu avec 5.8.8 et les threads. Je pense que votre problème est probablement dû à un problème de code qui n'est pas pris en perl.
Si vous le pouvez, je voudrais suggérer le dépouillement le code pour un exemple minimal. Vous devriez alors être en mesure de tenter de résoudre le problème de code.
delta.tigris.org est un bon outil pour la création d'un minimum reproductible cas de test. Il ne devrait pas être une lourde tâche, avec la bonne mécanique de l'aide 🙂
Suivant sur les mêmes fils que newt avait indiqué constaté que ce problème est connu et sera couvert dans de futures versions. J'ai remplacé la section où j'ai douté de la question avec un autre hack .. Fonctionne bien .. Merci pour le pointeur...
OriginalL'auteur Nic Gibson
La cause la plus probable est une incompatibilité de version de la glibc. Vous devez exécuter Perl avec la version de la glibc avec laquelle il a été compilé
OriginalL'auteur dsm
Cela ressemble à une erreur interne à Perl. Le "double gratuit ou de corruption" se réfère à la mémoire libérée deux fois, ou corrompu. Perl gère la mémoire pour vous, de sorte que cela ne devrait jamais arriver si Perl fonctionne correctement.
Est-il une nouvelle version de Perl, vous pouvez la mettre à jour?
Personnellement, je voudrais essayer la mise à niveau vers 5.8.9. Il est censé être une version de maintenance, donc il est peu probable rupture de votre application. L'annonce de publication pour Perl 5.8.9 fait état d'un correctif pour un problème de thread-safe. Cela pourrait être exactement votre problème. search.cpan.org/~nwclark/perl-5.8.9/pod/... En théorie, vous pouvez attacher un débogueur Perl et essayer d'en savoir plus sur où est le problème. Ce serait très ambitieux.
OriginalL'auteur Kevin Beck
Essayez de mettre à jour les "threads" et "threads::communes de" modules du CPAN.
OriginalL'auteur Alexandr Ciornii