2009-05-19 5 views
5

Podczas uruchamiania programu Perla I napotkał następujący błąd*** glibc wykryte *** perl: podwójne wolne lub korupcji (poprz!): 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] 

Mój OS Ubuntu 8.04, Perl wersja to 5.8.8

Moje skrypty zawierają wątki ... Nie mogę udostępnić kodu, ale chciałem się dowiedzieć, czy ktoś miał doświadczenie z tego typu błędami i jak je rozwiązałeś/zwróciłeś/przeanalizowałeś. Czy są jakieś narzędzia/dzienniki, które można by nazwać nieakceptowalną do pracy nad tego typu problemami.

Dziękujemy za wsparcie.

P.S: Wiem, że wątki nie są idealnymi przyjaciółmi dla nikogo. Jednak nie kontroluję decyzji o użyciu perla. Po prostu utrzymuję kod.

Odpowiedz

2

otworzyć swój kod i umieścić w nim gdzieś przed którym występuje problem:

$DB::single=1; 

Następnie uruchom

PERL5OPT='-dt' perl yourscript.pl 

i uderzył kilkakrotnie

c[enter]

aż problem się powtarza . (Zapamiętywanie, czy zatrzymuje się w twoim ręcznym punkcie przerwania, czy nie, zanim zawodzi).

Następnie przesuwaj ręcznie punkt przerwania w przód/w tył, aż uzyskasz go przed końcem punktu końcowego (możesz znaleźć punkt śmierci z kilkoma poleceniami drukowania), a następnie spróbuj wykonać pracę z tego miejsca, prawdopodobnie z pre -crash introspekcji.

To (miejmy nadzieję) pomoże ci wygenerować przypadek testowy, który wykazuje problem.

+0

Braking into threads był dla mnie bardzo bolesny. Dzięki za te informacje. :) Tak właśnie mogłem dowiedzieć się, jaki był problem. Po prostu nie powróciłem i nie oznakowałem rozwiązania. – kingpin

1

Najbardziej prawdopodobną przyczyną jest niekompatybilna wersja glibc. Musisz uruchomić Perl z wersją glibc, z którą został skompilowany

+0

Używam perl zainstalowany z ubuntu. Uważam, że perl zainstalowany domyślnie powinien być zgodny z wersją glibc. Plus Doświadczyłem tego samego problemu również na RHEL5. Tak więc nie powinno być, że oba te systemy mogą mieć konflikt wersji. – kingpin

1

To wygląda na błąd wewnętrzny w Perlu. "Podwójna swoboda lub korupcja" odnosi się do pamięci uwolnionej dwukrotnie lub uszkodzonej. Perl zarządza pamięcią, więc to nie powinno się zdarzyć, jeśli Perl działa poprawnie.

Czy istnieje nowa wersja Perla, którą można uaktualnić do?

+0

Używam perl 5.8.8 ... Mogę uaktualnić do 5.8.8 jednak produkt, który pracuję jest obsługiwany tylko w 5.8.8. Czy są jakieś inne narzędzia, które mógłbym podłączyć do debuggera i monitorować akcje oraz określić punkt w którym momencie skrypt się zepsuł. – kingpin

+0

Osobiście chciałbym uaktualnić do wersji 5.8.9. To ma być wydana wersja konserwacyjna, więc jest mało prawdopodobne, aby złamać aplikację. Ogłoszenie o wydaniu dla Perla 5.8.9 wspomina o poprawce dotyczącej problemu z wątkami. To może być dokładnie twój problem. http://search.cpan.org/~nwclark/perl-5.8.9/pod/perl589delta.pod#Smaller_fixes Teoretycznie można dołączyć do Perla debugera i spróbować dowiedzieć się, gdzie jest problem. Byłoby to bardzo ambitne. –

2

This thread na liście mailingowej perl5 wydaje się wskazywać, że jest to znany problem z 5.8.8 i wątkami. Myślę, że twój problem jest prawdopodobnie spowodowany problemem z kodem, który nie jest przechwytywany przez perl.

Jeśli możesz, proponuję rozebrać kod do minimalnego przykładu. Powinieneś wtedy spróbować naprawić problem z kodem.

+0

Zwalnianie kodu szuka sporego zadania. Chcę to zrobić w ostateczności. Czy mamy jakieś narzędzia wizualizacji dla wątków perla. Czy jestem zbyt ambitny ??? – kingpin

+0

http://delta.tigris.org to dobre narzędzie do tworzenia minimalnie odtwarzalnego testu. To nie powinno być ciężkie zadanie z właściwą mechaniczną pomocą :) – ephemient

+0

Podążając za podobnymi wątkami, które wskazywał newt, okazało się, że jest to znany problem i zostanie uwzględnione w przyszłych wersjach. Zastąpiłem sekcję, w której wątpiłem, że problem był związany z alternatywnym hackem. Działa dobrze. Dzięki za wskazówkę ... – kingpin

0

Spróbuj zaktualizować moduły "wątki" i "wątki :: współdzielone" z CPAN.

Powiązane problemy