Xcode-Debugging - Anzeigen von Bildern


98

Ich liebe es, den Xcode-Debugger zu verwenden. Sie können den Wert einer Variablen anzeigen und sogar ändern.

Aber kann ich das Bild, auf das eine Bildvariable verweist, irgendwie ANZEIGEN? Ich weiß, dass ich seine rohen Bytes sehen kann, aber es wäre viel menschlicher, ein Fenster mit seinem Inhalt anzuzeigen.

Xcode unterstützt dies möglicherweise nicht. Vielleicht gibt es ein externes Tool, mit dem Bilder angezeigt werden können?

Antworten:


271

Verwenden Sie die Schnellübersicht, um Bilder im Xcode-Debugger zu überprüfen.

Wählen Sie ein NSImageoder UIImageim Debugger aus und klicken Sie dann auf das Quick Look "Auge" -Symbol.

"Auge" -Symbol in der Xcode-Debugger-Symbolleiste

Wie in anderen Bereichen von OS X können Sie auch spacebarQuick Look!

Anzeigen eines UIImage im Xcode-Debugger über Quick Look

Quick Look im Debugger kann auch für Ihre eigenen Klassen implementiert werden:

Aktivieren der Schnellübersicht für benutzerdefinierte Typen

Mit der Variablen-Quick-Look-Funktion im Xcode-Debugger können Sie eine schnelle visuelle Beurteilung des Status einer Objektvariablen durch ein grafisches Rendering erhalten, das in einem Popover-Fenster entweder in der Ansicht der Debugger-Variablen oder in Ihrem Quellcode angezeigt wird.

In diesem Kapitel wird beschrieben, wie Sie eine Quick Look-Methode für Ihre benutzerdefinierten Klassentypen implementieren, damit Objektvariablen dieser Typen auch im Quick Look-Popover-Fenster visuell gerendert werden können.


13
Beste. Feature. Je!
Sev

2
Dies ist die wertvollste Antwort des Jahres!
Vedrano

7
Alter Codierung in Xcode und ich wusste nie über diese Funktion! Das ist fantastisch!!! Vielen Dank
Joan Cardona

2
Wusste von dieser Funktion, aber danke für den Tipp der Leertaste! Viel einfacher als mit der Maus auf das Auge zu klicken. :)
Chintan Patel

1
Arbeiten Sie mit Xcode 10 und Swift 4.2 wie ein Zauber. Vielen Dank.
Atereshkov

16

BEARBEITEN:

Ab Xcode 5 kann der Debugger Ihnen die visuelle Darstellung von UIImage / CGImageRef-Variablen anzeigen!

Xcode selbst kann das nicht. Ich weiß nichts über externe Tools.

Um Bilder während des Debuggens zu testen, konvertiere ich diese Rohdaten in ein Bilddateiformat wie .png, speichere sie dann irgendwo und öffne das Bild mit einem beliebigen Bildbetrachtungswerkzeug.

Zu diesem Zweck habe ich einen Code, der im Grunde so aussieht:

NSData *imageData = UIImagePNGRepresentation(self.myUIImage);
[imageData writeToURL:desktopURL atomically:YES];

Und ich kopiere gerade diesen Code, wo ich den Inhalt eines Bildes auf dem Lauf sehen möchte.

Stellen Sie sicher, dass Sie diesen Code aufgrund der hohen Kosten für die Konvertierung von UIImagein so schnell wie möglich entfernenNSData


2
nur neugierig: warum sagst du "(und solltest es nicht tun)"? Es gab einmal eine Zeit, in der Leute sagten, Computer sollten keine Farbbildschirme haben, da sie zu teuer sind, oder ein Texteditor, der von Programmierern verwendet wird, sollte Ihren Code nicht überprüfen. Irgendwann müssen wir uns sicher von archaischen Ideen entfernen.
synchronisiert

Ok, also nehme ich das "sollte nicht" zurück. Ich wünschte, eines Tages würden IDEs Bilder beim Debuggen interpretieren.
Avi Shukron

Das ist eine großartige Idee und hat mir nur geholfen - danke. Ein bisschen offensichtlich, wenn jemand darauf hinweist, aber immer noch ein großartiger Hinweis.
Scott Little

@unsynchronized werden Sie sich das ansehen ... Xcode 5 kann Bilder im Debugger anzeigen ...
Avi Shukron

14

Für Xcode 5 bearbeiten: Wenn Sie jetzt mit der Maus über einen Bildvariablennamen fahren, wird rechts ein "Augen" -Symbol angezeigt. Klicken Sie einfach darauf, um das aktuelle Bild zu sehen!

HINWEIS: Manchmal schlägt dies in Xcode fehl, auch wenn das Bild korrekt ist. In diesem Fall ODER wenn Sie keine UIImage-Variable haben (z. B. eine Eigenschaft eines anderen Objekts), können Sie weiterhin die ältere Antwort verwenden:

Ältere Antwort: Ausgehend von Avrahams Antwort habe ich einige Experimente zum Anzeigen eines iOS-Bildes von lldb versucht, ohne es neu kompilieren oder einer Ansicht hinzufügen zu müssen. Ich habe mir endlich Folgendes ausgedacht:

e [UIImagePNGRepresentation(myImage) writeToFile:@"/Users/<userName>/Desktop/myImage.png" atomically:NO];

Ich behalte diese Zeichenfolge in einem Texteditor und füge sie ein, wenn ich sie brauche. Dadurch wird das aktuelle Bild, an dem ich interessiert bin (in diesem Fall "myImage"), in einer PNG-Datei auf dem Desktop gespeichert. Dann kann ich diese Datei einfach mit Vorschau öffnen.

Wenn Sie an einem iOS-Gerät arbeiten, können Sie verwenden

 e [UIImagePNGRepresentation(myImage) writeToFile:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingString:@"/myImage.png"] atomically:NO];

Dann können Sie den Finder verwenden; wählen sie ihren Gerätetyp; "Dateien"; dann Ihre Entwickler-App und kopieren Sie das Bild auf Ihren Desktop, um es anzuzeigen.


+1000000 Das ist eine erstaunliche Lösung! Ich möchte hinzufügen, dass Sie beim Debuggen auf dem Gerät etwas wie iFunBox oder iExplorer verwenden können, um das Image vom Gerät abzurufen.
Quentin

Sie können sogar direkt in "/ Users / <Ihr Benutzername> /" schreiben. Auf diese Weise müssen Sie nicht über GUIDs nach Ihrem temporären Ordner suchen
Dannie P

Guter Vorschlag (beachten Sie, dass Sie / Users / <Ihr Benutzername> / verwenden müssen, es funktioniert nicht mit ~ /). Der Vorschlag wurde entsprechend aktualisiert.
Mackworth

Super Vorschlag @mackworth. Vielen Dank.
Arango_86

13

Wenn Sie arbeiten mit der LLDB Konsole Verwendung Meißel Befehl „visualisieren“

Trinkgeld:

Nach der Installation können Sie einen bedingten Haltepunkt festlegen, nachdem Sie das UIImage mit der folgenden Aktion festgelegt haben: "visualisiere myUIImageToShowWithQuickLook"

Geben Sie hier die Bildbeschreibung ein

Dies zeigt Ihnen das Bild automatisch, wenn der Debugger stoppt.


4

Was ist, wenn Sie über die Variablenansicht nicht zum Bild gelangen können?

Echo, was @pkamb gesagt hat - Sie können die Variablenansicht verwenden, um ein Bild schnell anzusehen. Aber was ist, wenn Sie nicht zum Bild gelangen können?

Zum Beispiel habe ich ein Bild bei (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

Wenn ich jedoch versuche, contentViewControllerin der Variablenansicht zu erweitern , werden meine Unteransichten nicht angezeigt

Geben Sie hier die Bildbeschreibung ein

Sie können mit der rechten Maustaste klicken, einen Ausdruck hinzufügen und dann können Sie ihn sehen!

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


Dann sollten Sie in der Lage sein, denselben Befehl wie oben zu verwenden: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] als? UIImageView) .image) writeToFile: @ "/ Users / <Benutzername> / Desktop /watchImage.png "atomar: NEIN];
Mackworth

-7

Sie können einen Haltepunkt in die Zeile Ihres Bildes einfügen und dann im Debugger einfach schreiben:

po your_UIImage_object

posteht für print object, es ist ein GDB-Befehl, der mehrere nützliche Informationen über das übergebene Objekt anzeigt, in Ihrem Fall das Bild.


1
Wenn Sie po direkt mit dem UIImage-Objekt verwenden, wird nur die Klassennamen-Speicheradresse der Instanz auf der Konsole gedruckt. So etwas wie: <UIImage: 0x7fc98df6c7d0>
Daniel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.