Jak „ustawić punkt przerwania w malloc_error_break do debugowania”

126

Otrzymuję wiele takich wyników konsoli bez awarii mojej aplikacji:

malloc: * błąd obiektu 0xc6a3970: zwalniany wskaźnik nie został przydzielony * ustaw punkt przerwania w malloc_error_break do debugowania

Jak mogę się dowiedzieć, którego obiektu lub zmiennej dotyczy problem?

Próbowałem ustawić symboliczny punkt przerwania w ten sposób, ale nigdy się nie zatrzymuje:

wprowadź opis obrazu tutaj

openfrog
źródło
1
Rozwiązuję ten problem, wyłączając przegląd safari. stackoverflow.com/a/43885754/6521116
Kris Roofe
Jedną z przyczyn tego jest funkcja / metoda, która ma zwrócić obiekt, osiąga koniec funkcji i nic nie zwraca.
Xofo

Odpowiedzi:

136

Ustaw punkt przerwania na malloc_error_break (), otwierając nawigator punktów przerwania (Widok-> Nawigatory-> Pokaż nawigator punktów przerwania lub ⌘7), klikając przycisk plus w lewym dolnym rogu i wybierając „Dodaj symboliczny punkt przerwania”. W wyskakującym okienku wpisz malloc_error_breakw polu Symbol, a następnie kliknij Gotowe.

EDYCJA: openfrog dodał zrzut ekranu i wskazał, że wypróbował już te kroki bez powodzenia po tym, jak opublikowałem moją odpowiedź. Po tej edycji nie jestem pewien, co powiedzieć. Nie widziałem, żeby to nie zadziałało, i rzeczywiście, zawsze trzymam punkt przerwania na ustawieniu malloc_error_break.

Andrew Madsen
źródło
2
To zadziałało dla mnie (bez modułu). Przyczyną problemu dla mnie było to, że miałem UIImagekopię zapasową pliku i nadpisałem plik innym obrazem. Spowodowało to błąd, gdy wywołałem UIImagePNGRepresentationoryginalny obraz (nie wtedy, gdy plik został faktycznie nadpisany).
Robert,
Nie dostaję przycisku plusa w lewym dolnym rogu ⌘7paska ... Może miałeś na myśli ⌘8?
ScottyBlades
@ScottyBlades zgaduje, że skrót się zmienił. Napisałem tę odpowiedź 8 lat i 7 głównych wersji Xcode temu ...
Andrew Madsen
@AndrewMadsen Bez obaw, po prostu sprawdzam, czy edycja ma sens.
ScottyBlades
46

Na zrzucie ekranu nie wskazałeś żadnego modułu: spróbuj ustawić „libsystem_c.dylib”

wprowadź opis obrazu tutaj

Zrobiłem to i działa: punkt przerwania zatrzymuje się tutaj (chociaż ślad stosu często powstaje z jakiejś niejasnej biblioteki systemowej ...)

Vinzzz
źródło
7
Wygląda nazwą modułu jest różny w iOS, to: libsystem_malloc.dylib. Punkt przerwania działa dla mnie bez określania modułu.
Nestor,
6

Miałem ten sam problem z Xcode. Poszedłem za krokami, które podałeś i to nie zadziałało. Oszalałem, ponieważ na każdym forum, które widziałem, wszystkie wskazówki dotyczące tego problemu są tymi, które podawałeś. W końcu zobaczyłem, że wstawiłem spację po malloc_error_break, stłumiłem to i teraz działa. Głupi problem, ale jeśli rozwiązanie nie działa, upewnij się, że nie masz miejsca przed i po malloc_error_break.

Mam nadzieję, że ta wiadomość pomoże ...

Sébastien
źródło
4

Miałem uprawnienia, że ​​nie powinienem pisać w niektórych folderach (zwłaszcza / usr / bin /) i to spowodowało problem. Naprawiłem to, otwierając Narzędzie dyskowe i uruchamiając „Napraw uprawnienia do dysku” na dysku Macintosh HD.

user3843991
źródło
Dzięki, to naprawiło moją zepsutą maszynę.
Matt Fletcher,
2

Rozwiązuję to przez bliskiego inspektora safari. Zapoznaj się z moim postem . Czasami znajdowałem dźwięk, kiedy uruchamiam moją aplikację do testowania, potem otwieram safari z włączonym automatycznym inspektorem, po czym wykonuję jakąś akcję w mojej aplikacji, a następnie pojawia się ten problem.

wprowadź opis obrazu tutaj

Kris Roofe
źródło