Intelligenter Obj-C-Variableninhalt beim Debuggen in Xcode?

8

In seiner Standardkonfiguration (dh in meiner Konfiguration) ist Xcode in seinem Debugger-Fenster für Variablen, insbesondere für die allgemeinen Objective-C-Sammlungen, wenig hilfreich.

Der Debugger scheint normalerweise die zugrunde liegende Obj-C-Struktur anzeigen zu wollen, wenn ich ein Objekt expandiere, also schaue ich auf isa s und die Klassenhierarchie.

Aber was ich fast immer hier möchte, ist etwas semantisch Sinnvolles für das Objekt selbst. Z.B. Für ein NSDictionary möchte ich idealerweise eine Liste mit Schlüsseln / Werten sehen. Wenn diese Schlüssel und Werte beispielsweise NSString s sind, möchte ich nur die Zeichenfolgenwerte anzeigen, nicht komplexe verschachtelte Objekte. Dasselbe gilt für NSSet s, NSArrays und die Bytes innerhalb eines NSData . Und NSString s, während sie normalerweise ihre String-Repräsentation in der Summary-Spalte erhalten, können nicht betrachtet werden, wenn sie lang sind (zB ein Pfadname, der zu lang ist, um in die Spalte zu passen, scheint nicht zu scrollen) - wenn ich doppelklicken Sie darauf, ich bekomme stattdessen die Anzeige Vorlage String, so dass ich es auch nicht auswählen / kopieren kann.

Ich habe vor kurzem Zeit in Eclipse verbracht, um Java zu debuggen, und bei all seinen Fehlern weiß Eclipse von allen Java-Sammlungen und hat eine einfache Einzeil-Dump-Funktion für den Inhalt einer Zeichenkette oder Sammlung oder was auch immer, wenn Sie sie finden im Debugger.

Gibt es eine Möglichkeit, dies in Xcode zu bekommen? Fehle ich etwas Offensichtliches, oder sollte ich in das Display-Templating-System eintauchen? Ich weiß, dass es dort Unterstützung gibt, da NSArrays ein spezielles listy Format zu erhalten scheinen, NSDictionaries eine "2 key / value pairs" Zusammenfassung bekommen, etc.

EDIT: Es ist möglich, in GDB zu gehen, um mehr Daten über Objekte zu erhalten. Ich bin entmutigt, dass po von GDB, das auf ein NSDictionary wirkt, die Art von unglaublich nützlicher Ausgabe liefert, die ich von einem GUI-Debugger erwarte. Kann dies repliziert werden, ohne dass der Kontext zur Konsole wechselt?

Ich genieße die Xcode-Umgebung so sehr, aber die fast vollständige Undurchsichtigkeit von Objekten, die ich die ganze Zeit nutze, hält die Debugging-Zeit wirklich auf. Danke.

    
Ben Zotto 14.07.2010, 18:12
quelle

3 Antworten

1

In Xcode 6 scheint diese Funktion implementiert worden zu sein? Ich kann nicht mit den Funktionen von Xcode sprechen, als diese Frage 2010 gestellt wurde.

NSString , NSNumber , NSArray und NSDictionary Werte in Ihrem Code mit einem Haltepunkt:

Wenn der Haltepunkt bricht, können Sie die Werte in der Xcode "Variablenansicht" sehen. Für Sammlungen müssen Sie möglicherweise den Detailpfeil erweitern:

Wenn Sie mit der rechten Maustaste auf eine Variable klicken und "Print Description of variable_name" auswählen, wird der Wert -debugDescription / -description des Objekts auf der Konsole ausgegeben. Dies ist oft nützlich für komplexere Sammlungen und möglicherweise für lange NSString Werte und so weiter.

    
pkamb 02.09.2015, 17:42
quelle
4

Ja, XCode-Variablen-Lookup während der Debug ist schwach, aber es basiert auf gdb und Sie können es steuern, dachte die Konsole. Öffnen Sie während des Debuggens die Konsole und schreiben Sie den Befehl, den Sie benötigen, um das NSDictionary * dic zu sehen; Inhalt ist so einfach wie

%Vor%

po gibt die Daten wie im Ergebnis [obj description] dargestellt aus. Sie können auch Methoden wie

aufrufen %Vor%

Sie können mehr in gdb Hilfe

erhalten     
Gobra 14.07.2010 18:27
quelle
4

Ich würde sowohl die spezielle GDB-Ausgabe betrachten (wie Gobra bemerkt hat), als auch die Display-Vorlagen.

Das Display-Zeug sieht komplex aus, ist aber ziemlich einfach - hier ist ein Beispiel für makign NSIndexPath display " Sec: x Zeile: y ":

%Vor%

Sie können also beschreibenden Text und mehrere Werte für jeden Objekttyp drucken. Die Anzeigevariablen funktionieren für alle Klassen dieses Typs und bleiben zwischen XCode-Ausführungen und auch zwischen Projekten erhalten.

Eine letzte knifflige Sache ist, dass für alles, was eine Zeichenkette zurückgibt, ein ": s" nach dem "{}" Paar wie folgt hinzugefügt werden muss:

%Vor%

Wenn Sie eine Display-Vorlage löschen müssen, klicken Sie einfach auf die Zeile, um sie zu bearbeiten und zu löschen. Sie kehren dann zur Standardeinstellung zurück. So ist es sehr einfach, temporäre Formatierer für jedes Objekt zu erstellen, mit dem Sie genau sehen können, was von Interesse ist.

    
quelle

Tags und Links