Débogage Xcode - affichage des images

99

J'adore utiliser le débogueur Xcode. Vous pouvez consulter la valeur d'une variable et même la modifier.

Mais puis-je en quelque sorte AFFICHER l'image qui est référencée par une variable d'image? Je sais que je peux voir ses octets bruts, mais il serait beaucoup plus convivial d'afficher une fenêtre avec son contenu.

Xcode peut ne pas prendre en charge cela. Peut-être existe-t-il un outil externe qui aiderait à afficher les images?

Krasnyk
la source

Réponses:

273

Utiliser Quick Look pour inspecter les images dans le débogueur Xcode.

Sélectionnez un NSImageou UIImagedans le débogueur, puis cliquez sur l'icône «œil» Quick Look.

icône "œil" dans la barre d'outils du débogueur Xcode

Comme d'autres zones d'OS X, vous pouvez également utiliser spacebarQuick Look!

Affichage d'une UIImage dans le débogueur Xcode via Quick Look

Quick Look dans le débogueur peut également être implémenté pour vos propres classes:

Activation de la recherche rapide pour les types personnalisés

La fonction Quick Look de variables dans le débogueur Xcode vous permet d'obtenir une évaluation visuelle rapide de l'état d'une variable objet via un rendu graphique, affiché dans une fenêtre popover soit dans la vue des variables du débogueur, soit en place dans votre code source.

Ce chapitre décrit comment implémenter une méthode Quick Look pour vos types de classes personnalisés afin que les variables d'objet de ces types puissent également être rendues visuellement dans la fenêtre contextuelle Quick Look.

pkamb
la source
13
Meilleur. Fonctionnalité. Déjà!
Sev
2
C'est la réponse la plus précieuse de l'année!
vedrano
8
Ages codant dans Xcode et je n'ai jamais su cette fonctionnalité! C'est génial!!! Merci beaucoup
Joan Cardona
2
Connaissait cette fonctionnalité mais merci pour le conseil de la barre d'espace! Beaucoup plus facile que de cliquer sur l'œil avec la souris. :)
Chintan Patel
1
Travaillez avec Xcode 10 et Swift 4.2 comme un charme. Merci.
atereshkov
16

ÉDITER:

À partir de Xcode 5, le débogueur peut vous montrer la représentation visuelle des variables UIImage / CGImageRef!

Xcode lui-même ne peut pas le faire. Je ne connais pas les outils externes.

Ce que je fais pour tester les images pendant le débogage est de convertir ces données brutes dans un format de fichier image, comme .png, puis de l'enregistrer quelque part, puis j'ouvre l'image avec n'importe quel outil de visualisation d'image.

J'ai un morceau de code à cet effet, qui ressemble essentiellement à ça:

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

Et je suis juste en train de copier-coller ce code là où je veux voir le contenu d'une image en cours d'exécution.

Assurez - vous de se débarrasser de ce code le plus tôt possible en raison du coût élevé de la-conversion de UIImagelaNSData

Avi Shukron
la source
2
juste curieux: pourquoi dites-vous "(et ne devriez pas) le faire"? il fut un temps où les gens disaient que les ordinateurs "ne devraient pas" avoir d'écrans couleur, car ils étaient trop chers, ou qu'un éditeur de texte utilisé par les programmeurs "ne devrait pas" vérifier la syntaxe de votre code. à un moment donné, nous devons nous éloigner des idées archaïques, sûrement?
non synchronisé
Ok, donc je reprends le "ne devrait pas". Je souhaite qu'un jour les IDE interprètent les images pendant le débogage.
Avi Shukron
C'est une excellente idée et cela m'a aidé - merci. C'est assez évident une fois que quelqu'un le souligne, mais c'est toujours un excellent indicateur.
Scott Little
@unsynchronized allez-vous regarder ça ... Xcode 5 peut afficher des images dans le débogueur ...
Avi Shukron
14

Modifier pour Xcode 5: Maintenant, lorsque vous survolez le nom d'une variable d'image, il y a une icône "œil" sur la droite. Cliquez simplement dessus pour voir l'image actuelle!

REMARQUE: parfois cela échoue dans Xcode, même si l'image est correcte. Si cela se produit, OU si vous n'avez pas de variable UIImage (par exemple, c'est une propriété d'un autre objet, vous pouvez toujours utiliser l'ancienne réponse:

Réponse plus ancienne: en commençant par la réponse d'Avraham, j'ai essayé quelques expériences pour afficher une image iOS à partir de lldb sans avoir à la recompiler ou à l'ajouter à une vue. J'ai finalement trouvé:

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

Je garde cette chaîne dans un éditeur de texte et la colle quand j'en ai besoin. Cela stocke l'image actuelle qui m'intéresse (dans ce cas, "myImage") dans un fichier PNG sur le bureau. Ensuite, je peux simplement ouvrir ce fichier avec Aperçu.

Si vous travaillez sur un appareil iOS, vous pouvez utiliser

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

Ensuite, vous pouvez utiliser le Finder; Sélectionnez votre appareil; "Des dossiers"; puis votre application de développement et copiez l'image sur votre bureau pour l'afficher.

Mackworth
la source
+1000000 C'est une solution incroyable! Je tiens à ajouter que si vous déboguez sur l'appareil, vous pouvez utiliser quelque chose comme iFunBox ou iExplorer pour récupérer l'image de l'appareil.
Quentin
Vous pouvez même écrire directement dans "/ Users / <votre nom d'utilisateur> /"; de cette façon, vous n'aurez pas à rechercher votre dossier temporaire via les GUID
Dannie P
Bonne suggestion (notez que vous devez utiliser / Users / <votre nom d'utilisateur> /, cela ne fonctionne pas avec ~ /). Mise à jour de la suggestion en conséquence.
mackworth
Super suggestion @mackworth. Merci.
arango_86
13

Si vous aimez travailler avec la console lldb, utilisez la commande burin "visualiser"

pointe:

après l'installation, vous pouvez définir un point d'arrêt conditionnel après avoir défini l'UIImage avec l'action: "visualiser myUIImageToShowWithQuickLook"

entrez la description de l'image ici

cela vous montrera l'image automatiquement lorsque le débogueur s'arrête.

Zaster
la source
4

Que faire si vous ne pouvez pas accéder à l'image via la vue des variables?

En écho à ce que @pkamb a dit - vous pouvez utiliser la vue des variables pour regarder rapidement une image. Mais que faire si vous ne pouvez pas accéder à l'image?

par exemple j'ai une image à (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

mais si j'essaie de développer contentViewControllerla vue variable, cela n'expose pas mes sous-vues

entrez la description de l'image ici

ce que vous pouvez faire est un clic droit, ajouter une expression, puis vous pouvez la voir!

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

wyu
la source
Ensuite, vous devriez pouvoir utiliser la même commande que ci-dessus: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] as? UIImageView) .image) writeToFile: @ "/ Users / <userName> / Desktop /watchImage.png "atomiquement: NON];
mackworth
-7

Vous pouvez mettre un point d'arrêt dans la ligne de votre image, puis dans le débogueur, écrivez simplement:

po your_UIImage_object

posignifie print object, c'est une commande GDB qui affichera plusieurs informations utiles sur l'objet passé, dans votre cas l'image.

Malloc
la source
1
En fait, l'utilisation directe de po avec l'objet UIImage n'imprimera sur la console que l'adresse mémoire du nom de classe de l'instance. Quelque chose comme: <UIImage: 0x7fc98df6c7d0>
Daniel