2008-11-17 3 views
6

Kiedy nad uwalniając wskaźnik może pojawić się błąd taki jakiPhone - Monitorowanie „wskaźnik uwolnieniu nie została przydzielona” błędy

„wskaźnik uwolnieniu nie została przydzielona”

Gdy debugowanie z symulatorem, ja add the build argument MallocStackLogging = YES - to pozwala mi używać malloc_history w terminalu do śledzenia, w którym miejscu uwolniłem wskaźnik.

Jeśli debugować na urządzeniu z tej kompilacji argumentu uzyskać wszelkiego rodzaju błędów konsoli „nie można utworzyć stos plików dziennika” itd

dziwne, ja trochę ponad uwolnione błędy wskaźnika pojawiające się na urządzeniu, ale nie na symulatorze.

Czy ktoś miał jakiekolwiek doświadczenie w śledzeniu tego za pomocą samego urządzenia?

Dzięki!

Odpowiedz

1

ja zazwyczaj używają NSZombie do takich rzeczy, sprawdź this się

0

Musisz ustawić zmienne env MallocStackLogging na wykonywalnego docelowej ...

Aby uzyskać dostęp do tych ustawień, wybierz swój plik wykonywalny z grup & Panel plików w XCode, a następnie Pobierz informacje.

Przejdź do zakładki argumenty i dodać następujące wpisy do „Zmienne należy ustawić w środowisku” box:

9

Innym sposobem, aby to zrobić. Upewnij się, że włączasz NSZombie, więc zgłasza adres pamięci obiektu, który otrzymuje dodatkowe wydanie. Następnie uruchom narzędzie Performance Tool-> Object Allocations. To przyniesie instrumenty. Zobacz dziennik konsoli dostarczony przez organizatora Xcode. Po znalezieniu awarii sprawdź adres pamięci w instrumentach. Zobaczysz całą historię mallocs/frees na tym obiekcie, a także linki bezpośrednio do twojego kodu.

+2

I nie był w stanie uzyskać go z tych ścisłych kierunkach (w Xcode 4.2.1) - miałem uruchomić Xcode, a następnie podłączyć Instruments, gdy był uruchomiony. Miałem włączoną opcję "Włącz obiekty zombie" dla mojego obecnego schematu, a kiedy uruchomiłem wyjątek, Instruments zaczepił się jak mistrz i zabrał mnie do historii na adres zombie. Przyjrzałem się śladowi stosu przy początkowej alokacji i widziałem niepotrzebne '[autorelease]', które powodowało wyjątek. Niesamowite narzędzie! – Dov

+0

Kompletne "jak to" jest pokazane na wideo WWDC z 2010 r. O nazwie "Sesja 311 - Zaawansowana analiza pamięci za pomocą instrumentów" o 31:50. – brainray

0

Proszę przetestuj program pod kątem wycieków pamięci, sprawdź również autorekiety i czy zwalniasz obiekty prawidłowo, czy też nie. Musimy również sprawdzić, czy zwolniony obiekt ma przydzieloną pamięć, czy też nie. Musisz również zachować ostrożność w kwestii autoreakcji, ponieważ przypadkowo możemy zwolnić tablicę lub ciąg znaków lub dowolny obiekt, który jest już autoodtwarzany ... mam nadzieję, że to pomaga i działa!

Wskazówka: Można sprawdzić szczelność poprzez analizę projektu (kliknij shift + Command + K)

Powiązane problemy