Xcode Debugger: değişkenin değerini görüntüle


107

UITableViewController'daki kodum:

delegate.myData = [myData objectAtIndex:indexPath.row];

Nasıl değerlerini görebilirsiniz delegate.myDataya indexPath.rowDebugger'daki? delegate.myDatabir dizi ve indexPath.rowbir int. Sadece nesnelerin hafıza adreslerini görebiliyorum delegateve indexPathnerede myDatave nerede row?

alternatif metin

Yanıtlar:


142

Bunu kontrol edin NSDictionary değişkeninin içeriğini Xcode hata ayıklayıcıda nasıl görüntüleyebilirim?

Ben de kullanıyorum

po variableName
print variableName

Konsolda.

Senin durumunda yürütmek mümkündür

print [myData objectAtIndex:indexPath.row]  

veya

po [myData objectAtIndex:indexPath.row]

Teşekkür ederim! Çok deniyorum: "print [myData objectAtIndex: indexPath.row]", "po [myData objectAtIndex: indexPath.row]", "print indexPath.row", "po indexPath.row", ... Ama her seferinde "satır adında üye yok" mesajını aldı. Bu çalışır: "indexPath yazdır" ve "po indexPath". Bu yüzden "." Yerine "[]" kullanmayı denedim: "po [indexPath row]" -> "NIL nesnesinin açıklaması yazdırılamıyor." "po [indexPath getRow]" -> "Hedef bu mesaj seçiciye yanıt vermiyor." :-(
Manni

4
yazdırmayı dene (int) [indexPath satır]
Andriy

po [myData objectAtIndex: (int) [indexPath row]]
Andriy

@VanDuTran Ben po objswift ile eşdeğerinin oldukça eminim po print(obj).
Chris

Bu, hesaplanan özelliklerin değerlerini bulmak için de mükemmeldi. Teşekkürler!
Paula Hasstenteufel

26

Gelişen bir ortam olarak Xcode'un değişkenlerde hata ayıklamanın kolay bir yolunu içermesi gerektiği konusunda diğer posterlere katılıyorum. İyi haber, bir tane var!

Arama yaptıktan ve Xcode'da değişkenlerin nasıl hata ayıklanacağına dair basit bir cevap / öğretici bulamadıktan sonra, Xcode ile keşfe çıktım ve bunu (en azından benim için) çok yararlı buldum.

Xcode 4.6.3'te değişkenlerinizde kolayca hata ayıklama

Xcode'un ana ekranında, ekran görüntüsünde gösterilen sağ üst köşe düğmesine tıklayarak alt Hata Ayıklama Alanını gördüğünüzden emin olun.

Hata Ayıklama Alanı düğmesi

Xcode 4.6.3'te Hata Ayıklama Alanı

Şimdi, Kod Alanınızın sınırına tıklayarak kodunuzda programınızın duraklatılmasını istediğiniz satır olan bir Kesme Noktası belirleyin.

Kesme noktası

Şimdi Hata Ayıklama Alanında bu düğmeleri arayın ve ortadakini tıklayın. Bölgenizin artık ikiye bölündüğünü fark edeceksiniz.

Hata Ayıklama Alanını Böl

Böyle görünmeli

Şimdi uygulamanızı çalıştırın.

Programınızın yürütülmesi sırasında ilk Kesme Noktasına ulaşıldığında, sol tarafta o kesme noktasında bulunan tüm değişkenlerinizi göreceksiniz.

Arama alanı

Daha fazla ayrıntı için değişken üzerindeki sol okları genişletebilirsiniz. Ve hatta istediğiniz değişkeni izole etmek için arama alanını kullanın ve Kesme Noktası kapsamına "adım attığınızda" gerçek zamanlı olarak değiştiğini görün.

İçine adım

Hata Ayıklama Alanınızın sağ tarafında, istenen değişken üzerine farenin sağ düğmesini tıklayarak değişkenleri istediğiniz gibi yazdırmak için gönderebilirsiniz.

Bağlamsal Menü

Gördüğünüz gibi, bu bağlamsal menü çok ilginç hata ayıklama seçenekleriyle doludur. Gibi İzle zaten yazmış komutları ve hatta birlikte ileri sürülmüştür Düzenleme Değer ... bu senin değişkenin çalışma zamanı değerini değiştirir!


21

Sen de yapabilirsin:

  1. Yürütmeyi duraklatmak için bir kesme noktası ayarlayın.
  2. Nesne, yürütme kapsamı içinde olmalıdır
  3. Fare işaretçisini nesnenin veya değişkenin üzerine getirin
  4. Sarı bir ipucu görünecektir
  5. Fareyi ipucunun üzerine getirin
  6. Yukarı ve aşağı işaret eden iki küçük oku tıklayın
  7. Bir bağlam menüsü açılacaktır
  8. "Açıklamayı Yazdır" ı seçin, bir [nesne açıklaması] yürütecektir
  9. Açıklama konsolun çıktısında görünecektir

IMHO biraz gizli ve hantal ...


Xcode'umdaki "Print Description" çalışmıyor, peki onu nasıl etkinleştirebilirim?
Kirtikumar A.

@kirtiavaiya uygulama duraklatılmış olmalı ve değişkeninizin yazdırılacak mevcut kapsam içinde olması gerekir. Ayrıca doğrudan "self.variable" yazdıramazsınız, ancak Andriy çözümünü _ <değişken adı> yazdırmak için kullanabilirsiniz. Örneğin: self.btnHello için konsola "po _btnHello" yazın (bu yalnızca alıcı yönteminin adını değiştirmediyseniz çalışır)
LightMan

@LightMan evet, dediğin gibi, ama sonra da çalışmıyor
Kirtikumar A.

10

Kafanızın karışması, bildirilen özelliklerin (zorunlu olarak aynı adı verilen) (örnek) değişkenler olmadığından kaynaklanıyor.

İfade

indexPath.row

eşdeğerdir

[indexPath row]

ve ödev

delegate.myData = [myData objectAtIndex:indexPath.row];

eşdeğerdir

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];

sentezlenmiş özellikler için standart adlandırma varsayımı.

Dahası, delegatemuhtemelen bir tür olarak bildirilir id<SomeProtocol>, yani derleyici delegateo noktada gerçek tür bilgilerini sağlayamamıştır ve hata ayıklayıcı derleme zamanında sağlanan bilgilere dayanmaktadır. Yana idbir genel tür olduğunu, örnek değişkenleri hakkında hiçbir derleme zamanı bilgisi var delegate.

Bunlar görmüyorsun nedenleri şunlardır myDataveya rowdeğişkenler olarak.

-rowVeya göndermenin sonucunu incelemek -myDataistiyorsanız, komutları kullanabilirsiniz pveya po:

p (NSInteger)[indexPath row]
po [delegate myData]

veya ifadeler penceresini kullanın (örneğin, delegategerçek türde olduğunu biliyorsanız, MyClass *bir ifade ekleyebilir (MyClass *)delegateveya sağ tıklayıp gerçek türünü delegateseçip View Value as…yazabilirsiniz delegate(örn. MyClass *).

Bununla birlikte, hata ayıklayıcının daha yararlı olabileceğine katılıyorum:

  • Hata ayıklayıcı penceresine derleme zamanı bilgileri yerine çalışma zamanı tür bilgilerini kullanmasını söyleme seçeneği olabilir. Verilen hata ayıklayıcıyı yavaşlatır, ancak yararlı bilgiler sağlar;

  • Bildirilen özellikler, özellikler adı verilen bir grupta gösterilebilir ve doğrudan hata ayıklayıcı penceresinde (isteğe bağlı) incelemeye izin verebilir. Bu aynı zamanda bilgi almak için bir mesaj gönderme / bir yöntemi uygulama ihtiyacı nedeniyle hata ayıklayıcıyı yavaşlatır, ancak yararlı bilgiler de sağlar.


Açıklamanız için teşekkürler! Bu bana çok yardımcı oldu! :-)
Manni

7

Çalışma zamanında konsol penceresine değerleri yazdırabilirsiniz. Aşağıdaki adımlar:

  1. Değerlerini almak istediğiniz bir kırılma noktası yerleştirin
  2. Şimdi adım adım hata ayıklama gerçekleştirin.
  3. Değeri çalışma zamanında kontrol edilecek değişken / delege üzerine bir imleci yerleştirin.
  4. Şimdi bu değişken / delege açıklamasını gösterecek
  5. "İ" tıklandığında ayrıntılı açıklama gösterilecektir
  6. Bu, ayrıntıları konsol penceresine de yazdıracaktır.

Konsol penceresindeki ayrıntıları yazdırmak için ekran görüntüsü


1
Bu hızlı çalışıyor mu, obj c'de gördüğümüz gibi nesnenin değerlerini hızlı göremiyorum.
umairhhhs

1
@umairhhhs Bu gönderi yalnızca Objective-C içindir.
Jayprakash Dubey

1
Bunun neden hızlı düzenleyicide olmadığını merak ediyorum çünkü çok yardımcı oldu ve zaman kazandıran bir özellikti.
umairhhhs

1

Bu biraz karmaşıklaşıyor. Bu nesneler özel sınıflar veya yapılardır ve bunların içine bakmak Xcode'da diğer geliştirme ortamlarında olduğu kadar kolay değildir.

Senin yerinde olsam, görmek istediğin değerleri bir tanımla birlikte NSLog'a kaydederdim.

yani:

NSLog(@"Description of object & time: %i", indexPath.row);

11
Evet, NSLog bir olasılıktır, ancak hata ayıklamaya uygun bir alternatif değildir. İstenilen değerleri göstermenin bir yolu olmadığına çok şaşırdım. Bu, bir geliştirme ortamının temel işlevselliğine aittir.
Manni

2
XCode ile ilgili en sinir bozucu şey. Acınası.
ryan 0

1

Çalıştır-> Göster-> İfadeler'i deneyin

Dizinin adını veya aradığınız şeyi girin.


Teşekkür ederim! İfade penceresine "indexPath.row" ve "delegate.myData" yazdım ancak her seferinde "Özet" sütununda "kapsam dışı" görünüyor :-(
Manni

np, bulana kadar aynı sorunu yaşadım;)
tbone

1
dizinizi veya herhangi bir şeyi ayarladıktan hemen sonra bir kesme noktası ayarlayın ve değeri İfadeler'de bulmalısınız. İyi şanslar
tbone
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.