Próba wejścia w kod AFNetworking powoduje wygenerowanie następującego ostrzeżenia:
[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.
I oczywiście nie jestem w stanie debugować kodu. Mówiąc konkretnie, próbuję debugować UIImageView+AFNetworking
kategorię, która wydaje się niemożliwa. Zmiana kodu nie ma wpływu ( NSLog
próba itp.), A przy próbie wejścia w kompilatory przechodzi do kodu asemblera i pokazuje UIImageView+TVASTAFNetworking
jako nazwę kategorii, która nie istnieje nigdzie w bazie kodu.
Korzystanie z Xcode 7. iOS 9 i 8. Cocoapods (bez frameworka)
AKTUALIZACJA
Zapomniałem wspomnieć, że Optymalizator jest ustawiony none
zarówno na konfigurację wydania, jak i debugowania i faktycznie używam Debug
config.
AKTUALIZACJA 2
Strip Debug Symbols
Jest również wyłączone.
ios
afnetworking-2
xcode7
Mojtaba
źródło
źródło
Strip Debug Symbols
jest wyłączone.Odpowiedzi:
Jeśli twój projekt korzysta z Swift, w konfiguracji projektu / celu istnieją dwa osobne ustawienia „Poziomu optymalizacji”.
Upewnij się, że oba zostały poprawnie ustawione:
None [-O0]
dla LLVM iNone [-0none]
Swift) dla danej konfiguracji kompilacji.Takie postępowanie rozwiązało dla mnie to ostrzeżenie.
źródło
po
,p
,expr
...?Wygląda na to, że Twój projekt jest w trybie zwolnienia. Tryb wydania kompiluje aplikację z wieloma optymalizacjami, ale debuggery nie znoszą optymalizacji, więc aby niezawodnie debugować aplikację, musisz przełączyć ją w tryb debugowania, który zmniejsza optymalizację i dodaje garść informacji debugujących. Aby przełączyć go w tryb debugowania:
źródło
To ostrzeżenie pojawia się tylko wtedy, gdy osiągniesz punkt przerwania, a źródło znajduje się w projekcie, w którym włączono optymalizację, uniemożliwiając obserwowanie rzeczywistych wartości zmiennych (każdy obiekt jest wyświetlany jako zero, nawet jeśli nie jest)
W moim przypadku zdarzyło się to tylko podczas debugowania krok po kroku przez zależność cocoapod.
Tak więc, nawet jeśli prawidłowo ustawiono główny cel i ustawienia projektu (Symbol debugowania pasma = WYŁ., A poziom optymalizacji Brak), musisz upewnić się, że jest taki sam dla projektu kapsuły, z którego uderza punkt przerwania.
źródło
None [-O0]
)pod install
ponownie. Zmień to w ten sposób .Okazuje się, że po zaimportowaniu starego projektu (Xcode 7.x +) do nowego Xcode 8.3 (8E162), prawdopodobnie ze względu na optymalizację kompilatora, Swift Compiler - Optimization Level został domyślnie ustawiony na Fast, Single-File Optimization :
Zmiana na brak rozwiązała problem:
źródło
Editor
->Validate Settings
następnie potwierdź wszystkie zmiany. Więc powinieneś dostaćUstaw opcję Debuguj na
None
.źródło
To było dla mnie rozwiązanie ...
Wzdłuż linii odpowiedzi gimino, jeśli używasz cocoapodów, dodaj taką linię do Podfile:
lub dla wersji cocoapods> = 1.0 (dzięki Diejmon)
Gdzie MyProject ma „Debugowanie - lokalne”, „Debugowanie - przemieszczanie”, „Debugowanie - PRODUKCJA” jako konfiguracje debugowania oprócz standardowego „Debugowania”
Domyślnie cocoapods zwykle generują konfiguracje kapsuł jako Release, ta linia Podfile pozwala ci powiedzieć, że są debugowane.
źródło
Natknąłem się dziś na ten sam problem i wymyśliłem go (przynajmniej w moim przypadku). Używam również CocoaPods i miałem ten problem podczas uruchamiania mojego testowego celu (Swift zmieszany z ObjC).
Używam Xcode 7.2, z iOS 9.2 SDK.
Na poniższym obrazku widać optymalizacje celu i projektu przed moją zmianą:
Zaskakujące jest to, że mimo że optymalizacją jest Brak [-O0] , dopiero po zmianie ustawienia projektu z -Os na -O0 kompilator przestał optymalizować cel.
Poniżej możesz zobaczyć moje ostateczne ustawienia:
źródło
Minęło dużo czasu, ale w końcu udało mi się rozwiązać problem. Jest trzecia flaga optymalizacji
LTO
lubLink Time Optimization
Zaskakująco nikt o niej nie wspominał iz jakiegoś powodu też nie zwróciłem na nią uwagi. Jest tuż nadOptimization Level
ustawieniem, jak widać na wielu zrzutach ekranu tutaj.Podsumowując, istnieją 3 różne flagi optymalizacji, które chcesz wyłączyć w celu debugowania:
-flto
)-O
)Więcej informacji o LTO: http://llvm.org/docs/LinkTimeOptimization.html
źródło
Jeśli musisz wyłączyć optymalizacje dla swoich kapsuł Swift, aby móc debugować w nich, dodaj następujące elementy do swojego
Podfile
. Spowoduje to wyłączenie optymalizacji tylko dla kompilacji debugowania.źródło
Czy na pewno konfiguracja debugowania nie optymalizuje kodu (nie powinna)? Wygląda na to, że przypadkowo włączyłeś optymalizacje konfiguracji debugowania i powinieneś wyłączyć ją z ustawień celu.
źródło
Ten błąd zdarzył mi się dwa razy i w każdym przypadku wystąpił błąd w parametrze URL używanym do żądania usługi. W jednym przypadku adres URL miał trochę miejsca w sekcji portu, w drugim przypadku pewna wartość opcjonalna nie była rozpakowywana.
Dlatego poprawką było upewnienie się, że adres URL żądania jest poprawnie sformułowany. Więcej informacji o mojej sprawie i podobne zgłaszanie tego samego tutaj .
źródło
Wszystko, co zrobiłem, to wyczyszczenie (
Product > Clean
) mojego projektu i uruchomienie go ponownieźródło
Może to być nadmierne uproszczenie, ale czy budujesz dla wydania lub z optymalizacją (która usuwa symbole z Swift lub LLVM) zbyt wysoko? Jeśli tak, edytuj swój schemat i przejdź do Debugowania lub edytuj Ustawienia kompilacji dla szybkiej optymalizacji LLVM na Brak (0).
źródło
Na wypadek, gdyby ktoś napotkał ten problem podczas debugowania zasobnika, który korzysta wewnętrznie z biblioteki C, istnieje inna rzecz, którą musisz zmienić w ustawieniach projektu, aby działał on oprócz wszystkich innych wymienionych w wątku.
Przejdź do ustawień projektu Pods -> Twój cel C-using -> Ustawienia kompilacji -> Apple Clang - Niestandardowe flagi kompilatora -> Inne flagi C i usuń
-O3
flagę, która jakoś tam dotarła.źródło