Xcode zeigt einen Fehler an, wenn versucht wird, ein Objekt mit zu drucken po <objectName>
, jedoch nur für ein Projekt.
Fehler: Struktur konnte nicht materialisiert werden: Größe der Variablen <varName> stimmt nicht mit der Größe des ValueObject überein. Fehler beim Ausführen, PrepareToExecuteJITExpression konnte nicht vorbereitet werden
Der Xcode-Debugger zeigt auch ALLE Objekte als nil
( self
ausgeschlossen) an, wenn dies nicht der NSLog
Fall ist ( zeigt die korrekte Ausgabe, wie im Bild gezeigt). Ich weiß nicht, was mit dem Projekt los ist. Jedes andere Projekt funktioniert gut.
Irgendeine Idee, was es sein könnte? (Das Reinigen des Projekts hatte keine Auswirkung.)
ios
objective-c
xcode
debugging
Binarian
quelle
quelle
NSString
s hat eine Zeile über dem Haltepunkt erstellt!Antworten:
Sind Sie sicher, dass Sie sich nicht im "Release-Modus" befinden?
Wenn Sie Variablenwerte anzeigen möchten, müssen Sie sich im "Debug-Modus" befinden (klicken Sie auf Ihren Projektnamen in der oberen linken Ecke neben den Start / Stopp-Schaltflächen, dann auf "Schema bearbeiten ...", dann auf "Ausführen" und dann auf "Ausführen". Info "Registerkarte, dann" Build Configuration ". Hier setzen Sie" Debug ". Wenn es auf" Release "war, haben Sie alle Nullen gesehen).
quelle
debug configuration
?Build Settings
der Bereitstellungseigenschaft sehen,Strip debug symbols during copy
die auf YES gesetzt wurde.Strip debug symbols during copy
auf ,NO
und dieOptimization Level
zuNone -O0
im ProjektBuild Settings
Ich habe "Optimierungsstufe" für die Debug-Konfiguration auf "Keine" gesetzt und das Problem wurde behoben.
quelle
Fastest, Smallest[-Os]
und es hat funktioniert.Stellen Sie sicher, dass Address Sanitizer in Ihren Schemaeinstellungen deaktiviert ist. Der Address Sanitizer funktioniert nicht gut mit dem Debugger.
quelle
Es scheint, dass jeder seine eigene Lösung hat.
Für mich benutze ich
Objective-C
undSwift
gleichzeitig.Gehen Sie zunächst zu
TARGETS -> Build Settings
und suchen Sie diecode generation
Sie finden
Apple LLVM 6.0
undSwift Compiler
Ändern Sie
Optimization Level
alles inNone
, dann Debuggen, möglicherweise finden Sie den Wert nichtnil
Erstaunlicherweise lösen Sie dieses Problem dauerhaft, sobald Sie den Wert sehen, und können ihn dann ändern
Optimization Level
.quelle
Dies kann auf andere Weise geschehen. Für mich lag es daran, dass der Wert "Other C Flags" auch für den Debug-Build auf "-O2" gesetzt wurde. Durch Deaktivieren dieser Option für den Debug-Build wurde das Problem behoben.
quelle
Für mich hat Xcode die Debugger-Ausgabe herausgefiltert. Stellen Sie sicher, dass Ihre Ausgabeeinstellung Debugger-Ausgabe oder Alle Ausgabe ist
quelle
Ich bin gerade auf dieses Problem gestoßen und habe festgestellt, dass es
Deployment Postprocessing = YES
in den Build-Einstellungen liegt.Ändern Sie dies, um
NO
es zu beheben, wie im folgenden Screenshot gezeigt:Xcode-Version: 6.0.1 (6A317) unter OSX 10.9.5
quelle
Ich bin gerade auf ein ähnliches Problem gestoßen: Irgendwann druckte der Xcode-Debugger plötzlich einige Objekttypen aus, insbesondere NSStrings als (null), obwohl sie mit einem Wert initialisiert wurden. Gedruckt über
Der korrekte Wert für das Objekt wurde angezeigt.
Verwirrend! Das Problem zu lösen war ziemlich einfach: Ich habe Xcode einfach heruntergefahren und meinen Computer neu gestartet. Nach dem Neustart von Xcode funktioniert alles wieder einwandfrei :).
quelle
Stellen Sie sicher,
Link-Time Optimization = No
dass der Debug-Modus in den Build-Einstellungen angezeigt wird.quelle
Das war alles was ich brauchte.
quelle
Die Lösungen hier beheben auch den Fehler, den Sie
error: <EXPR>:1:1: error: use of unresolved identifier
jedes Mal sehen, wenn Sie versuchen,po
eine Variable zu verwenden.Für mich bestand die Lösung darin, nach zu
Build Settings
suchenOptimization Level
und sicherzustellen, dass jedeDebug
Einstellung auf eingestellt warNone
.quelle
Gehen Sie in der Build-Einstellung zu "Andere C-Flags" und setzen Sie den Debug-Wert von -o2 auf -O0
quelle
Ich bin auch darauf gestoßen und als ich feststellte, dass ich mich im Release-Modus befand, wechselte ich zum Debuggen ... kein Fix. Es stellt sich heraus, dass ich zuerst eine Reinigung durchführen musste (cmd + shift + k).
Ich denke also, dass nach dem eingebauten Release-Modus nicht alles in Develop neu kompiliert wird und lldb die Symbole nicht richtig lesen kann. Nach dem Reinigen und Neukompilieren in der Entwicklung hat es bei mir funktioniert.
quelle
Die Realität ist, dass das System sofort funktionieren sollte und nicht aufgrund von Links zu einer Vielzahl unterschiedlicher Einstellungen, bis zu einem Punkt, an dem die Dinge für Sie funktionieren könnten oder nicht.
Warum erlaubt das System nicht, im Debug-Modus immer zu debuggen, ist ein Rätsel, das nur Apple beantworten kann (wenn es sie interessiert, was latelly ich bezweifle, dass sie es tun).
Der Unterschied zwischen Debug und Nicht-Debug besteht schließlich in zusätzlichen Tabellen mit Metadaten, die nur Speicher / Speicherplatz ausfüllen.
Wenn Sie direkt mit dem Simulator oder einem Gerät kompilieren, sind Ihnen diese zusätzlichen Megabyte egal.
Wir müssen also zusätzliche Schleifen ausführen, um eine sehr einfache und einfache Sache zu machen, die alle IDs, die ich seit dem letzten Jahrhundert kenne, gut machen.
Und für mich hat sich beim "Debuggen" der Link-Time-Optimierung von "Monolithic" auf "No" (xcode 8) geändert.
quelle