Beim Versuch, in den AFNetworking-Code einzusteigen, wird folgende Warnung generiert:
[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.
Und natürlich kann ich den Code nicht debuggen. Um genau zu sein, versuche ich, eine UIImageView+AFNetworking
Kategorie zu debuggen, was unmöglich erscheint. Das Ändern des Codes hat keine Auswirkung (versucht NSLog
usw.). Wenn Sie versuchen, in Compiler einzusteigen, wird der Assemblycode aufgerufen und UIImageView+TVASTAFNetworking
als Kategoriename angezeigt, der an keiner Stelle in der Codebasis vorhanden ist.
Verwenden von Xcode 7. iOS 9 & 8. Cocoapods (kein Framework)
UPDATE
Ich habe vergessen zu erwähnen, dass Optimizer none
sowohl für die Release- als auch für die Debug-Konfiguration eingestellt ist, und ich verwende tatsächlich Debug
config.
UPDATE 2
Strip Debug Symbols
Ist auch aus.
quelle
Strip Debug Symbols
ist aus.Antworten:
Wenn Ihr Projekt Swift verwendet, gibt es in der Projekt- / Zielkonfiguration zwei separate Einstellungen für "Optimierungsstufe".
Stellen Sie sicher, dass Sie beide richtig eingestellt haben:
None [-O0]
für LLVM undNone [-0none]
für Swift) für die betreffende Build-Konfiguration ein.Dadurch wurde diese Warnung für mich behoben.
quelle
po
,p
,expr
...?Es sieht so aus, als ob sich Ihr Projekt im Release-Modus befindet. Der Release-Modus kompiliert die App mit vielen Optimierungen, aber Debugger hassen Optimierungen. Um die App zuverlässig zu debuggen, müssen Sie sie in den Debug-Modus schalten, der die Optimierung reduziert und eine Reihe von Debugging-Informationen hinzufügt. So wechseln Sie in den Debug-Modus:
quelle
Diese Warnung wird nur angezeigt, wenn Sie einen Haltepunkt erreichen und sich die Quelle in einem Projekt befindet, in dem die Optimierung aktiviert ist, sodass Sie keine echten Variablenwerte anzeigen können (jedes Objekt wird als Null angezeigt, auch wenn dies nicht der Fall ist).
In meinem Fall geschah dies nur beim schrittweisen Debuggen durch eine Cocoapod-Abhängigkeit.
Selbst wenn Sie Ihre Hauptziel- und Projekteinstellungen richtig eingestellt haben (Strip-Debug-Symbol = AUS und Optimierungsstufe Keine), müssen Sie sicherstellen, dass es für das Pod-Projekt, von dem aus Sie den Haltepunkt erreichen, dasselbe ist.
quelle
None [-O0]
)pod install
wieder. Ändere es so .Es stellt sich heraus, dass nach dem Importieren eines alten Projekts (Xcode 7.x +) in neuen Xcode 8.3 (8E162), wahrscheinlich aufgrund der Compileroptimierung, die Swift Compiler - Optimierungsstufe standardmäßig auf Schnelle Optimierung einzelner Dateien festgelegt wurde :
Wenn Sie es in "Keine" ändern, wurde das Problem behoben:
quelle
Editor
->Validate Settings
dann alle Änderungen bestätigen. Dann solltest du bekommenSetzen Sie Debug auf
None
.quelle
Das war die Lösung für mich ...
Wenn Sie gemäß der Antwort von Gimino Cocoapods verwenden, fügen Sie dem Podfile eine Zeile wie diese hinzu:
oder für Cocoapods Versionen> = 1.0 (danke Diejmon)
Wobei MyProject zusätzlich zum Standard-Debug "Debug - lokal", "Debug - Staging", "Debug - PRODUCTION" als Debug-Konfigurationen hat.
Standardmäßig generieren Cocoapods normalerweise Pod-Konfigurationen als Release. In dieser Podfile-Zeile können Sie angeben, dass sie debuggen.
quelle
Ich bin heute auf dasselbe Problem gestoßen und habe es herausgefunden (zumindest in meinem Fall). Ich verwende auch CocoaPods und hatte dieses Problem beim Ausführen meines Testziels (Swift gemischt mit ObjC).
Ich verwende Xcode 7.2 mit iOS 9.2 SDK.
Im Bild unten sehen Sie die Optimierungen für das Ziel und das Projekt vor meiner Änderung:
Das Überraschende ist, dass der Compiler die Optimierung des Ziels erst nach dem Ändern der Projekteinstellung von -Os auf -O0 beendet hat , obwohl die aufgelöste Optimierung None [-O0] ist .
Unten sehen Sie meine endgültigen Einstellungen:
quelle
Es ist lange her, aber ich habe das Problem endlich gelöst. Es gibt ein drittes Optimierungsflag
LTO
oderLink Time Optimization
und Überraschenderweise hat es hier niemand erwähnt und aus irgendeinem Grund habe ich es auch nicht beachtet. Es befindet sich genau dort über derOptimization Level
Einstellung, wie Sie in vielen hier veröffentlichten Screenshots sehen können.Zusammenfassend gibt es drei verschiedene Optimierungsflags, die Sie zum Debuggen deaktivieren möchten:
-flto
)-O
)Weitere Informationen zu LTO: http://llvm.org/docs/LinkTimeOptimization.html
quelle
Wenn Sie Optimierungen für Ihre Swift-Pods deaktivieren müssen, damit Sie sie debuggen können, fügen Sie Folgendes zu Ihrem hinzu
Podfile
. Dadurch werden die Optimierungen nur für Debug-Builds deaktiviert.quelle
Sind Sie sicher, dass Ihre Debug-Konfiguration den Code nicht optimiert (sollte es nicht)? Es sieht so aus, als hätten Sie versehentlich Optimierungen für die Debug-Konfiguration aktiviert und sollten diese in den Einstellungen des Ziels deaktivieren.
quelle
Dieser Fehler ist mir zweimal passiert und war in jedem Fall ein Fehler im URL-Parameter, der zum Anfordern eines Dienstes verwendet wurde. In einem Fall hatte die URL etwas Platz im Portabschnitt, in dem anderen Fall wurde ein optionaler Wert nicht entpackt.
Das Update sollte also sicherstellen, dass die URL für die Anfrage gut formuliert ist. Weitere Informationen zu meinem Fall und ähnliche Berichte finden Sie hier .
quelle
Ich habe lediglich
Product > Clean
mein Projekt bereinigt ( ) und erneut ausgeführtquelle
Dies mag eine übermäßige Vereinfachung sein, aber bauen Sie für Release oder mit einer zu hohen Optimierung (die Symbole aus Swift oder LLVM entfernt)? Wenn ja, bearbeiten Sie Ihr Schema und wechseln Sie zu Debug, oder bearbeiten Sie Ihre Build-Einstellungen für die schnelle oder LLVM-Optimierung auf Keine (0).
quelle
Nur für den Fall, dass jemand beim Debuggen eines Pods, der intern eine C-Bibliothek verwendet, auf dieses Problem stößt, müssen Sie zusätzlich zu allen anderen im Thread aufgeführten Elementen noch etwas in den Projekteinstellungen ändern, damit es funktioniert.
Gehen Sie zu Pods-Projekteinstellungen -> Ihr C-verwendendes Ziel -> Build-Einstellungen -> Apple Clang - Benutzerdefinierte Compiler-Flags -> Andere C-Flags und entfernen Sie das
-O3
Flag, das irgendwie dort angekommen ist.quelle