2009-05-19 5 views
5

Mientras se ejecuta un programa Perl me encontré con el siguiente error*** *** glibc detectado Perl: doble liberación o corrupción (Ant): 0x0c2b7138 ***

 
*** glibc detected *** perl: double free or corruption (!prev): 0x0c2b7138 *** 
/lib/tls/i686/cmov/libc.so.6[0xb7daea85] 
/lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7db24f0] 
perl(Perl_pregfree+0x3e)[0x80a004e] 
perl(perl_destruct+0xcf1)[0x806b711] 
/usr/local/lib/perl/5.8.8/auto/threads/threads.so[0xb79d2dfb] 
/usr/local/lib/perl/5.8.8/auto/threads/threads.so[0xb79d2f9b] 
/usr/local/lib/perl/5.8.8/auto/threads/threads.so[0xb79d5fbb] 
/lib/tls/i686/cmov/libpthread.so.0[0xb7e974fb] 
/lib/tls/i686/cmov/libc.so.6(clone+0x5e)[0xb7e19e5e] 

Mi sistema operativo es Ubuntu 8.04, Perl la versión es 5.8.8

Mis scripts contienen hilos ... No puedo compartir el código, pero quería saber si alguien ha tenido experiencia con este tipo de errores y cómo lo resolvió/abordó/analizó. ¿Hay alguna herramienta/registros a los que pueda referirme además de trabajar en este tipo de problemas?

Gracias por su apoyo.

P.S: Sé que los hilos no son los amigos ideales para cualquier persona. Sin embargo, no controlo la decisión de usar perl. Solo estoy manteniendo el código.

Respuesta

2

abrir su código y poner en él algún lugar antes, donde se produce el problema:

$DB::single=1; 

A continuación, ejecute

PERL5OPT='-dt' perl yourscript.pl 

y pulsa

c[enter]

repetidamente hasta que el problema se repite . (Anota si se detiene en tu punto de corte manual o no antes de fallar).

A continuación, mueva de forma iterativa el punto de interrupción manual de adelante/atrás hasta que lo tienes simplemente antes de que su punto de terminación (se podía encontrar el punto de la muerte con un grupo de comandos de impresión también), y luego tratar de trabajar desde allí, posiblemente con pre -Introspección de choque.

Esto (con suerte) ayudará a generar un caso de prueba que presenta el problema.

+0

Frenar en los hilos me causaba muchos dolores de cabeza ... Gracias por esta información. :) Así es como realmente pude descubrir cuál era el problema. Simplemente no regresó y etiquetó su solución. – kingpin

1

La causa más probable es una versión incompatible de glibc. Tiene que ejecutar Perl con la versión de glibc con el que se compiló

+0

estoy usando perl instalado con ubuntu. Creo que el Perl instalado por defecto debería ser compatible con la versión glibc. Además, también he experimentado el mismo problema en RHEL5. Por lo tanto, debería ser que ambos sistemas pudieran tener conflictos de versión. – kingpin

1

Esto parece un error interno de Perl. El "doble libre o corrupción" se refiere a que la memoria se libera dos veces o está dañada. Perl administra la memoria por ti, por lo que esto nunca debería suceder si Perl funciona correctamente.

¿Existe una versión más reciente de Perl que usted puede actualizar?

+0

Estoy usando Perl 5.8.8 ... Puedo actualizar a 5.8.8 Sin embargo, el producto que estoy trabajando solo se admite en 5.8.8. ¿Hay alguna otra herramienta que pueda conectarme al depurador y supervisar las acciones y puedo señalar exactamente en qué punto se rompió el guión? – kingpin

+0

Personalmente, intentaría actualizar a 5.8.9. Se supone que es una versión de mantenimiento, por lo que es poco probable que rompa su aplicación. El anuncio de lanzamiento de Perl 5.8.9 menciona una solución para un problema de enhebrado de hilos. Este podría ser exactamente tu problema. http://search.cpan.org/~nwclark/perl-5.8.9/pod/perl589delta.pod#Smaller_fixes En teoría, podría adjuntar un depurador a Perl e intentar obtener más información sobre dónde está el problema. Esto sería muy ambicioso. –

2

This thread de los porteros Perl5 lista de correo parece indicar que se trata de un problema conocido con 5.8.8 y roscas. Creo que su problema probablemente se deba a un problema de código que no es capturado por Perl.

Si es posible, sugeriría despojar el código a un ejemplo mínimo. Debería poder intentar solucionar el problema del código.

+0

Descomprimir el código está buscando una tarea considerable. Quiero hacerlo como último recurso. ¿Tenemos alguna herramienta de visualización para hilos Perl? ¿O estoy siendo demasiado ambicioso? – kingpin

+0

http://delta.tigris.org es una buena herramienta para crear un caso de prueba reproducible mínimo. No debería ser una tarea pesada con la ayuda mecánica adecuada :) – ephemient

+0

Siguiendo hilos similares a los que newt había apuntado encontró que este es un problema conocido y se tratará en las versiones futuras. Reemplacé la sección donde dudaba de que el problema estuviera relacionado con un truco alternativo. Funciona bien ... Gracias por el puntero ... – kingpin

0

intente actualizar 'roscas' y 'threads :: shared' módulos de CPAN.

Cuestiones relacionadas