Debug Xcode: visualizzazione di immagini


99

Adoro usare il debugger Xcode. Puoi dare un'occhiata al valore di una variabile e persino cambiarlo.

Ma posso in qualche modo VISUALIZZARE l'immagine a cui fa riferimento una variabile immagine? So di poter vedere i suoi byte grezzi, ma sarebbe molto più amichevole per l'uomo visualizzare una finestra con il suo contenuto.

Xcode potrebbe non supportarlo. Forse esiste uno strumento esterno che potrebbe aiutare a visualizzare le immagini?

Risposte:


273

Usa Quick Look per ispezionare le immagini nel debugger Xcode.

Seleziona un NSImageo UIImagenel debugger, quindi fai clic sull'icona "occhio" Quick Look.

icona "occhio" nella barra degli strumenti del debugger di Xcode

Come altre aree di OS X, puoi anche utilizzare spacebarQuick Look!

Visualizzazione di un UIImage nel debugger Xcode tramite Quick Look

Quick Look nel debugger può essere implementato anche per le tue classi:

Abilitazione della ricerca rapida per i tipi personalizzati

La funzionalità Quick Look delle variabili nel debugger di Xcode consente di ottenere una rapida valutazione visiva dello stato di una variabile oggetto attraverso un rendering grafico, visualizzato in una finestra popover nella vista delle variabili del debugger o in posizione nel codice sorgente.

Questo capitolo descrive come implementare un metodo Quick Look per i tipi di classe personalizzati in modo che le variabili oggetto di quei tipi possano essere visualizzate anche visivamente nella finestra popover Quick Look.


13
Migliore. Caratteristica. Mai!
Sev

2
Questa è la risposta più preziosa dell'anno!
vedrano

8
È età che codifica in Xcode e non ho mai saputo di questa funzione! Questo e spettacolare!!! Grazie mille
Joan Cardona

2
Conoscevo questa funzione, ma grazie per il suggerimento della barra spaziatrice! Molto più facile che fare clic sull'occhio con il mouse. :)
Chintan Patel

1
Lavora con Xcode 10 e Swift 4.2 come un fascino. Grazie.
atereshkov

16

MODIFICARE:

A partire da Xcode 5, il debugger può mostrarti la rappresentazione visiva delle variabili UIImage / CGImageRef!

Xcode stesso non può farlo. Non conosco strumenti esterni.

Quello che sto facendo per testare le immagini durante il debug è convertire quei dati grezzi in un formato di file immagine, come .png, quindi salvarli da qualche parte, quindi apro l'immagine con qualsiasi strumento di visualizzazione delle immagini.

Ho un pezzo di codice per questo scopo, che sostanzialmente assomiglia a questo:

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

E sto solo copiando e incollando questo codice dove voglio vedere il contenuto di un'immagine in fuga.

Assicurati di sbarazzarti di questo codice il prima possibile a causa del costo elevato della conversione di UIImageinNSData


2
solo curioso: perché dici "(e non dovresti) farlo"? c'era una volta in cui si diceva che i computer "non dovrebbero" avere schermi a colori, perché erano troppo costosi, o che un editor di testo usato dai programmatori "non dovrebbe" controllare la sintassi del codice. a un certo punto abbiamo bisogno di andare avanti da idee arcaiche, sicuramente?
non sincronizzato

Ok, quindi riprendo il "non dovrebbe". Vorrei che un giorno gli IDE interpretassero le immagini durante il debug.
Avi Shukron

Questa è una grande idea e mi ha aiutato - grazie. Un po 'ovvio una volta che qualcuno lo fa notare, ma è comunque un ottimo indicatore.
Scott Little

@unsynchronized lo guarderai ... Xcode 5 può mostrare immagini nel debugger ...
Avi Shukron

14

Modifica per Xcode 5: ora quando passi con il mouse sul nome di una variabile immagine, c'è un'icona "occhio" sulla destra. Basta fare clic per vedere l'immagine corrente!

NOTA: a volte questo non riesce in Xcode, anche se l'immagine è corretta. Se ciò accade, OPPURE se non hai una variabile UIImage (ad esempio è una proprietà di un altro oggetto, puoi comunque utilizzare la risposta precedente:

Risposta precedente: a partire dalla risposta di Avraham, ho provato alcuni esperimenti per visualizzare un'immagine iOS da lldb senza doverla ricompilare o aggiungere a una vista. Alla fine ho pensato:

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

Conservo questa stringa in un editor di testo e la incollo quando ne ho bisogno. Questo memorizza l'immagine corrente che mi interessa (in questo caso, "myImage") in un file PNG sul desktop. Quindi posso semplicemente aprire questo file con Anteprima.

Se stai lavorando su un dispositivo iOS, puoi usare

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

Quindi puoi usare il Finder; seleziona il tuo dispositivo; "File"; quindi la tua app di sviluppo e copia l'immagine sul desktop per visualizzarla.


+1000000 Questa è una soluzione straordinaria! Vorrei aggiungere che se stai eseguendo il debug sul dispositivo, puoi usare qualcosa come iFunBox o iExplorer per recuperare l'immagine dal dispositivo.
Quentin

Puoi anche scrivere direttamente a "/ Users / <il tuo nome utente> /"; in questo modo non dovrai cercare la tua cartella temporanea tramite GUID
Dannie P

Buon suggerimento (nota che devi usare / Users / <il tuo nome utente> /, non funziona con ~ /). Aggiornato il suggerimento di conseguenza.
mackworth

Fantastico suggerimento @mackworth. Grazie.
arango_86

13

Se ti piace lavorare con la console lldb, usa il comando scalpello "visualizza"

mancia:

dopo l'installazione, puoi impostare un breakpoint condizionale dopo aver impostato l'UIImage con l'azione: "visualize myUIImageToShowWithQuickLook"

inserisci qui la descrizione dell'immagine

questo ti mostrerà l'immagine automaticamente quando il debugger si ferma.


4

E se non riesci ad accedere all'immagine tramite la visualizzazione delle variabili?

Facendo eco a ciò che ha detto @pkamb, puoi utilizzare la visualizzazione delle variabili per visualizzare rapidamente un'immagine. Ma cosa succede se non riesci ad arrivare all'immagine?

per esempio ho un'immagine in (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

ma se provo ad espandere contentViewControllernella vista variabile non espone le mie viste secondarie

inserisci qui la descrizione dell'immagine

quello che puoi fare è fare clic con il pulsante destro del mouse, aggiungere un'espressione e poi puoi vederla!

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Quindi dovresti essere in grado di utilizzare lo stesso comando di cui sopra: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] as? UIImageView) .image) writeToFile: @ "/ Users / <userName> / Desktop /watchImage.png "atomicamente: NO];
mackworth

-7

Puoi inserire un punto di interruzione nella riga della tua immagine, quindi nel debugger, scrivi semplicemente:

po your_UIImage_object

posta per print object, è un comando GDB che mostrerà diverse informazioni utili sull'oggetto passato, nel tuo caso l'immagine.


1
In realtà l'uso di po con l'oggetto UIImage direttamente stamperà sulla console solo l'indirizzo di memoria del nome della classe dell'istanza. Qualcosa come: <UIImage: 0x7fc98df6c7d0>
Daniel
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.