Der Xcode-Debugger druckt keine Objekte und zeigt Null an, wenn dies nicht der Fall ist

165

Xcode zeigt einen Fehler an, wenn versucht wird, ein Objekt mit zu drucken po <objectName>, jedoch nur für ein Projekt.

Bildschirmfoto

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( selfausgeschlossen) an, wenn dies nicht der NSLogFall 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.)

Binarian
quelle
Für mich klingt es wie eine Art Zeigerproblem, aber ich bin mir ganz sicher, dass ich ehrlich bin. Was versuchst du zu tun / zu erreichen?
user2967030
3
Der Fehler tritt bei jedem Objekt dieses Projekts auf. Sogar NSStrings hat eine Zeile über dem Haltepunkt erstellt!
Binarian
1
Wie in der Frage gesagt, ändert die Reinigung nichts; (, aber danke für den Versuch. Die Fehlermeldung wurde hinzugefügt.
Binarian
3
Sind Sie sicher, dass Sie ohne Optimierungen bauen? (-O0)
iccir
1
Optimierungen können nicht nur in Projekteinstellungen, sondern auch in Zielen festgelegt werden. Es war m stecken :(
Basilikum

Antworten:

268

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).

Mick
quelle
3
Ich habe nur eine Konfiguration, wie kann ich die Konfiguration so ändern, dass sie wie eine ist debug configuration?
Binarian
2
Ah ok, ich habe ein leeres Projekt erstellt und kann jetzt alle Unterschiede in Build Settingsder Bereitstellungseigenschaft sehen, Strip debug symbols during copydie auf YES gesetzt wurde.
Binarian
16
@ Alex1987 Ich setze Strip debug symbols during copyauf , NOund die Optimization Levelzu None -O0im ProjektBuild Settings
Binarian
32
Leider hat lldb dies in bestimmten Situationen im Debug-Modus getan, wobei die Optimierungen deaktiviert waren und Debugging-Symbole vorhanden waren. Zeit, bug report.apple.com zu besuchen
ctpenrose
4
Hatte das gleiche Problem - Die Optimierungsstufe war "Keine". Das Problem war, dass die Link-Time-Optimierung (LTO) auch für den Debug-Modus auf "Ja" gesetzt wurde.
Pi3
38

Ich habe "Optimierungsstufe" für die Debug-Konfiguration auf "Keine" gesetzt und das Problem wurde behoben.

Leszek Zarna
quelle
2
Komisch, das hat nicht funktioniert. Ich habe das Gegenteil getan. Ich wechselte zu Fastest, Smallest[-Os]und es hat funktioniert.
Nate Hat
Viele verschiedene Vorschläge, aber dieser (Debug-Optimierung auf Keine setzen) hat es für mich behoben.
Dejal
29

Stellen Sie sicher, dass Address Sanitizer in Ihren Schemaeinstellungen deaktiviert ist. Der Address Sanitizer funktioniert nicht gut mit dem Debugger.

  1. Gehen Sie zu Schema bearbeiten (Produkt >> Schema >> Schema bearbeiten), wählen Sie Ausführen und wechseln Sie zur Registerkarte Diagnose.
  2. Stellen Sie sicher, dass "Enable Address Sanitizer" deaktiviert ist.

Geben Sie hier die Bildbeschreibung ein

KIO
quelle
4
Das war die Lösung für mich. Anscheinend gibt es viele Gründe, warum dies passieren kann.
Manroe
16

Es scheint, dass jeder seine eigene Lösung hat.

Für mich benutze ich Objective-Cund Swiftgleichzeitig.

Gehen Sie zunächst zu TARGETS -> Build Settingsund suchen Sie diecode generation

Sie finden Apple LLVM 6.0 und Swift Compiler

Ändern Sie Optimization Levelalles in None, 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.

LeiHao
quelle
11

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.

ThomasW
quelle
9

Gefilterte Debug-Ausgabe

Für mich hat Xcode die Debugger-Ausgabe herausgefiltert. Stellen Sie sicher, dass Ihre Ausgabeeinstellung Debugger-Ausgabe oder Alle Ausgabe ist

Curmudgeonlybumbly
quelle
6

Ich bin gerade auf dieses Problem gestoßen und habe festgestellt, dass es Deployment Postprocessing = YESin den Build-Einstellungen liegt.

Ändern Sie dies, um NOes zu beheben, wie im folgenden Screenshot gezeigt:

Geben Sie hier die Bildbeschreibung ein

Xcode-Version: 6.0.1 (6A317) unter OSX 10.9.5

Luke
quelle
5

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

NSLog(@"String value: %@", myString);

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 :).

Torsten Barthel
quelle
5

Stellen Sie sicher, Link-Time Optimization = Nodass der Debug-Modus in den Build-Einstellungen angezeigt wird.

llama591
quelle
Ich habe dieses Problem in Xcode 8 nur in meinen dynamischen Framework-Build-Einstellungen festgestellt! Thx
vmeyer
3
  1. Abgeleitete Daten löschen
  2. Ganz Xcode / Neustart
  3. Projekt reinigen

Das war alles was ich brauchte.

TMin
quelle
2

Die Lösungen hier beheben auch den Fehler, den Sie error: <EXPR>:1:1: error: use of unresolved identifierjedes Mal sehen, wenn Sie versuchen, poeine Variable zu verwenden.

Für mich bestand die Lösung darin, nach zu Build Settingssuchen Optimization Levelund sicherzustellen, dass jede DebugEinstellung auf eingestellt war None.

Kevin Xu
quelle
Das hat es tatsächlich für mich behoben. Haben Sie eine Idee, was der Nachteil beim Deaktivieren der Einstellung ist?
Jasper
1

Gehen Sie in der Build-Einstellung zu "Andere C-Flags" und setzen Sie den Debug-Wert von -o2 auf -O0

Shauket Sheikh
quelle
0

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.

Spencer Hall
quelle
-3

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.

irgendwie
quelle
Xcode = Kein
sofort einsatzbereiter