Xcode wyświetla błąd podczas próby drukowania obiektu za pomocą po <objectName>
, ale tylko dla jednego projektu.
błąd: nie można zmaterializować struct: rozmiar zmiennej <varName> nie zgadza się z rozmiarem ValueObject Errored out in Execute, nie można wykonać PrepareToExecuteJITExpression
Debuger Xcode pokazuje również WSZYSTKIE obiekty jako nil
( self
wykluczone), gdy nie są ( NSLog
pokazuje poprawne dane wyjściowe, jak widać na obrazku). Nie wiem, co jest nie tak z projektem. Każdy inny projekt działa dobrze.
Masz pojęcie, co to może być? (Czyszczenie projektu nie przyniosło efektu.)
ios
objective-c
xcode
debugging
Binarian
źródło
źródło
NSString
utworzono jedną linię powyżej punktu przerwania!Odpowiedzi:
Czy na pewno nie jesteś w „trybie wydania”?
Jeśli chcesz zobaczyć wartości zmiennych, musisz być w „trybie debugowania” (kliknij nazwę swojego projektu w lewym górnym rogu obok przycisków start / stop, następnie „Edytuj schemat ...”, potem ustawienia „Uruchom”, a następnie „ Info ", potem" Build Configuration ". Tutaj ustaw" Debug ". Jeśli było na" Release ", to jest to, że widziałeś wszystkie nils).
źródło
debug configuration
?Build Settings
, właściwość wdrożeniaStrip debug symbols during copy
została ustawiona na TAK.Strip debug symbols during copy
sięNO
iOptimization Level
doNone -O0
w projekcieBuild Settings
Ustawiłem „Poziom optymalizacji” dla konfiguracji debugowania na „Brak” i to rozwiązało problem.
źródło
Fastest, Smallest[-Os]
i zadziałało.Upewnij się, że Address Sanitizer jest wyłączony w ustawieniach Schematu. Narzędzie Address Sanitizer nie działa dobrze z debugerem.
źródło
Wygląda na to, że każdy ma swoje własne rozwiązanie.
Dla mnie używam
Objective-C
iSwift
jednocześnie.Przede wszystkim przejdź do
TARGETS -> Build Settings
i przeszukajcode generation
Znajdziesz
Apple LLVM 6.0
iSwift Compiler
Zmień ich
Optimization Level
wszystko naNone
, a następnie Debuguj, możesz znaleźć wartość nienil
O dziwo, gdy zobaczysz wartość, rozwiązujesz ten problem na stałe, a następnie możesz zmienić
Optimization Level
to, co było.źródło
Może to nastąpić na inne sposoby. U mnie to dlatego, że wartość „Other C Flags” była ustawiona na „-O2”, nawet dla kompilacji debugowania. Wyłączenie tego dla kompilacji debugowania rozwiązało problem.
źródło
Dla mnie Xcode odfiltrowywał dane wyjściowe debugera. Upewnij się, że ustawienie wyjściowe to Wyjście debugera lub Wszystkie dane wyjściowe
źródło
Właśnie napotkałem ten problem i stwierdziłem, że jest to spowodowane
Deployment Postprocessing = YES
ustawieniami kompilacji.Zmiana tego, aby
NO
to naprawić, jak widać na poniższym zrzucie ekranu:Wersja Xcode: 6.0.1 (6A317) na OSX 10.9.5
źródło
Po prostu napotykam podobny problem: w pewnym momencie debugger Xcode wydrukował niektóre typy obiektów, zwłaszcza NSStrings jako (null), chociaż zostały zainicjowane wartością. Wydrukowano za pośrednictwem
została wyświetlona poprawna wartość obiektu.
Mylące! Rozwiązanie problemu było dość łatwe: po prostu wyłączyłem Xcode i ponownie uruchomiłem komputer. Po ponownym uruchomieniu Xcode wszystko znów działa dobrze :).
źródło
Upewnij się, że
Link-Time Optimization = No
jest włączony tryb debugowania w ustawieniach kompilacji.źródło
To wszystko, czego potrzebowałem.
źródło
Rozwiązania tutaj naprawią również błąd, który widzisz za
error: <EXPR>:1:1: error: use of unresolved identifier
każdym razem, gdy próbujeszpo
użyć zmiennej.Dla mnie rozwiązaniem było przejście do,
Build Settings
wyszukanieOptimization Level
i upewnienie się, że każdeDebug
ustawienie jest ustawione naNone
.źródło
Przejdź do „Inne flagi C” w ustawieniach kompilacji i ustaw wartość debugowania z -o2 na -O0
źródło
Ja też się z tym spotkałem i kiedy stwierdziłem, że jestem w trybie wydania, przełączam się na debugowanie ... bez poprawki. Okazuje się, że najpierw musiałem zrobić czysty (cmd + shift + k).
Więc myślę, że to, co się dzieje, to to, że po wbudowaniu w tryb wydania nie wszystko jest rekompilowane w develop, więc lldb nie może poprawnie odczytać symboli. Po wyczyszczeniu i ponownej kompilacji w programie Develop, zadziałało.
źródło
W rzeczywistości system powinien działać od razu po wyjęciu z pudełka i nie działa z powodu linków do wielu różnych ustawień, do punktu, w którym wszystko może działać dla Ciebie lub nie.
Dlaczego system nie pozwala zawsze debugować w trybie debugowania, jest tajemnicą, na którą tylko Apple może odpowiedzieć (jeśli to obchodziło, co ostatnio wątpię).
W końcu różnicą między debugowaniem / brakiem debugowania byłyby dodatkowe tabele z metadanymi, które wypełniają tylko pamięć / miejsce na dysku.
Jeśli kompilujesz bezpośrednio na symulatorze lub urządzeniu, nie będziesz przejmować się tymi dodatkowymi megabajtami.
Musimy więc uruchomić dodatkowe pętle, aby zrobić bardzo podstawową i prostą rzecz, którą wszystkie Idy, które znam od ubiegłego wieku, działają dobrze.
I dla mnie to, co zadziałało, zmieniło się przy „Debugowaniu” optymalizacji czasu łącza z „Monolityczny” na „Nie” (xcode 8).
źródło