Xcode hata ayıklama - resimleri görüntüleme


100

Xcode hata ayıklayıcıyı kullanmayı seviyorum. Bir değişkenin değerine bakabilir ve hatta onu değiştirebilirsiniz.

Ama bir görüntü değişkeni tarafından referans verilen görüntüyü bir şekilde GÖSTEREBİLİR miyim? Ham baytlarını görebildiğimi biliyorum, ancak içeriğiyle bir pencere görüntülemek çok daha insan dostu olurdu.

Xcode bunu desteklemeyebilir. Belki de görüntülerin görüntülenmesine yardımcı olacak harici bir araç vardır?

Yanıtlar:


277

Xcode hata ayıklayıcısındaki görüntüleri incelemek için Hızlı Bakış'ı kullanın .

Hata ayıklayıcıda bir NSImageveya seçin UIImage, ardından Hızlı Bakış "göz" simgesini tıklayın.

Xcode hata ayıklayıcı araç çubuğundaki "göz" simgesi

OS X'in diğer alanlarında olduğu gibi, spacebarHızlı Bakış için de kullanabilirsiniz !

Quick Look ile Xcode hata ayıklayıcısında bir UIImage görüntüleme

Hata ayıklayıcıya Hızlı Bakış, kendi sınıflarınız için de uygulanabilir:

Özel Türler İçin Hızlı Bakmayı Etkinleştirme

Xcode hata ayıklayıcısındaki değişkenlere Hızlı Bakış özelliği, hata ayıklayıcı değişkenleri görünümünde veya kaynak kodunuzda bir açılır pencerede görüntülenen grafiksel bir oluşturma aracılığıyla bir nesne değişkeninin durumunun hızlı bir görsel değerlendirmesini elde etmenizi sağlar.

Bu bölüm, özel sınıf türleriniz için bir Hızlı Bakış yöntemini nasıl uygulayacağınızı açıklar, böylece bu türlerdeki nesne değişkenleri Hızlı Bakış açılır penceresinde görsel olarak da işlenebilir.


14
En iyi. Özellik. Hiç!
Sev

2
Bu yılın en değerli cevabı!
vedrano

9
Xcode'da kodlama çağları ve bu özelliği hiç bilmiyordum! Bu harika !!! Çok teşekkürler
Joan Cardona

2
Bu özellik hakkında bilgi sahibiydiniz, ancak boşluk çubuğu ipucu için teşekkürler! Fareyle göze tıklamaktan çok daha kolay. :)
Chintan Patel

1
Xcode 10 ve Swift 4.2 ile büyüleyici bir şekilde çalışın. Teşekkürler.
atereshkov

16

DÜZENLE:

Xcode 5 itibariyle, hata ayıklayıcı size UIImage / CGImageRef değişkenlerinin görsel temsilini gösterebilir!

Xcode bunu kendisi yapamaz. Harici araçlar hakkında bilgim yok.

Hata ayıklama sırasında görüntüleri test etmek için yaptığım şey, bu ham verileri .png gibi bir görüntü dosyası biçimine dönüştürmek ve ardından bir yere kaydetmek ve ardından görüntüyü herhangi bir görüntü görüntüleme aracıyla açıyorum.

Bu amaç için temelde şuna benzeyen bir kod parçam var:

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

Ve çalışma sırasında bir görüntünün içeriğini görmek istediğim yere bu kodu kopyalayıp yapıştırıyorum.

'A dönüştürmenin yüksek maliyeti nedeniyle bu koddan mümkün olan en kısa sürede kurtulduğunuzdan emin olun UIImage.NSData


2
sadece merak ediyorum: neden "yapmamalıydın" diyorsun? Bir zamanlar insanlar bilgisayarların çok pahalı oldukları için renkli ekranlara "sahip olmaması" gerektiğini veya programcılar tarafından kullanılan bir metin düzenleyicinin kodunuzu "sözdizimi" kontrol etmemesi gerektiğini "söylediler. Bir noktada arkaik fikirlerden yola çıkmamız gerekiyor, kesinlikle?
senkronize edilmemiş

Tamam, yani "olmamalı" yı geri alıyorum. Bir gün IDE'lerin hata ayıklama sırasında görüntüleri yorumlamasını diliyorum.
Avi Shukron

Bu harika bir fikir ve bana yardımcı oldu - teşekkürler. Biri bunu gösterdiğinde biraz bariz ama yine de harika bir işaretçi.
Scott Little

@unsynchronized buna bakacak mısın ... Xcode 5 hata ayıklayıcıdaki görüntüleri gösterebilir ...
Avi Shukron

15

Xcode 5 için düzenleme: Şimdi bir görüntü değişkeni adının üzerine geldiğinizde, sağda bir "göz" simgesi var. Mevcut resmi görmek için tıklamanız yeterli!

NOT: Bazen görüntü doğru olsa bile bu Xcode'da başarısız olur. Böyle bir durumda VEYA bir UIImage değişkeniniz yoksa (örneğin, bu başka bir nesnenin özelliğidir, yine de eski yanıtı kullanabilirsiniz:

Daha eski cevap: Avraham'ın cevabından başlayarak, lldb'den bir iOS görüntüsünü yeniden derlemek veya bir görünüme eklemek zorunda kalmadan görüntülemek için birkaç deney denedim. Sonunda şunu buldum:

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

Bu dizeyi bir metin düzenleyicide tutuyorum ve ihtiyacım olduğunda yapıştırıyorum. Bu, ilgilendiğim mevcut görüntüyü (bu durumda, "myImage") Masaüstündeki bir PNG dosyasına kaydeder. O zaman bu dosyayı Önizleme ile açabilirim.

Bir iOS cihazında çalışıyorsanız,

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

Ardından Finder'ı kullanabilirsiniz; cihazını seç; "Dosyalar"; daha sonra geliştirici uygulamanız ve görüntülemek için resmi Masaüstünüze kopyalayın.


+1000000 Bu harika bir çözüm! Cihazda hata ayıklıyorsanız, görüntüyü cihazdan almak için iFunBox veya iExplorer gibi bir şey kullanabileceğinizi eklemek isterim.
Quentin

Hatta doğrudan "/ Kullanıcılar / <kullanıcı adınız> /" adresine yazabilirsiniz; bu şekilde GUID'ler aracılığıyla geçici klasörünüzü aramanız gerekmeyecek
Dannie P

İyi bir öneri (/ Kullanıcılar / <kullanıcı adınız> / kullanmanız gerektiğini unutmayın, ~ / ile çalışmaz). Öneri buna göre güncellendi.
mackworth

Müthiş öneri @ mackworth. Teşekkürler.
arango_86

13

Lldb konsolu ile çalışmayı seviyorsanız, "visualize" keski komutunu kullanın

İpucu:

Kurulumdan sonra, UIImage'ı şu eylemle ayarladıktan sonra koşullu bir kesme noktası ayarlayabilirsiniz: "visualize myUIImageToShowWithQuickLook"

görüntü açıklamasını buraya girin

hata ayıklayıcı durduğunda bu size resmi otomatik olarak gösterecektir.


4

Değişkenler görünümü aracılığıyla resme ulaşamazsanız ne olur?

@Pkamb'ın söylediği şeyi tekrarlayarak - bir resme hızlıca bakmak için değişkenler görünümünü kullanabilirsiniz. Ama ya resme ulaşamazsanız?

örneğin bir resmim var (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

ancak contentViewControllerdeğişken görünümde genişletmeye çalışırsam, alt görünümlerimi göstermez

görüntü açıklamasını buraya girin

Yapabileceğiniz şey sağ tıklamak, bir ifade eklemek ve ardından bunu görebilirsiniz!

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin


Ardından, yukarıdakiyle aynı komutu kullanabilmeniz gerekir: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] as? UIImageView) .image) writeToFile: @ "/ Users / <userName> / Desktop /watchImage.png "atomik olarak: HAYIR];
mackworth


-8

Görüntünüzün satırına bir kesme noktası koyabilir ve ardından hata ayıklayıcıya şunu yazmanız yeterlidir:

po your_UIImage_object

poyerine print objectgeçer, bu, sizin durumunuzda görüntü gibi, geçirilen nesne hakkında birkaç yararlı bilgi gösterecek bir GDB komutudur.


1
Aslında UIImage nesnesiyle doğrudan po kullanılması, konsola yalnızca örneğin sınıf adı bellek adresini yazdırır. Şuna benzer bir şey: <UIImage: 0x7fc98df6c7d0>
Daniel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.