Xcode hata ayıklayıcı, nesneleri basmaz ve olmadığında nil gösterir


165

Xcode, po <objectName>yalnızca bir proje için olan bir nesneyi yazdırmaya çalışırken bir hata gösterir .

Ekran görüntüsü

hata: Yapı gerçekleştirilemedi: <varName> değişkeninin boyutu, Yürütme'de oluşturulan ValueObject öğesinin boyutuyla aynı değil, PrepareToExecuteJITExpression

Xcode hata ayıklayıcısı, TÜM nesneleri görünmediğinde nil( selfhariç) olarak NSLoggösterir ( resimde görüldüğü gibi doğru çıktıyı gösterir). Projede neyin yanlış olduğunu bilmiyorum. Diğer her proje iyi çalışıyor.

Ne olabileceği hakkında fikri olan? (Projeyi temizlemenin hiçbir etkisi olmadı.)


Bana bir tür işaretçi sorunu gibi geliyor, ama kesinlikle dürüst olacağından eminim. Ne yapmaya / başarmaya çalışıyorsunuz?
user2967030

3
Hata , o projenin her nesnesinde oluşur . Hatta NSStringkesme noktasının üstünde bir satır oluşturdu!
Binarian

1
Soruda belirtildiği gibi, temizlik hiçbir şeyi değiştirmez; (, ama denediğiniz için teşekkürler. Hata mesajı eklendi.
Binarian

3
Optimizasyon olmadan bina yaptığınızdan emin misiniz? (-O0)
iccir

1
Optimizasyonlar sadece proje ayarlarında değil, hedeflerde de ayarlanabilir. Sıkışmış m vardı :(
fesleğen

Yanıtlar:


269

"Serbest bırakma modunda" olmadığınızdan emin misiniz?

"Hata ayıklama modunda" olmanız gereken değişken değerleri görmek istiyorsanız (başlat / durdur düğmelerinin yanındaki sol üst köşedeki proje adınızı, ardından "Düzeni düzenle ...", ardından "Çalıştır" ayarlarını, ardından " Bilgi "sekmesini, sonra" Yapılandırmayı Yapılandır "ı seçin. Burada" Hata Ayıkla "yı ayarlayın. Eğer" Serbest Bırakma "üzerindeyse, tüm sıfırları gördünüz).


3
Ben sadece bir yapılandırma var, nasıl yapılandırılacak şekilde değiştirmek için bir gibi debug configuration?
Binarian

2
Ah tamam, boş bir proje oluşturdum ve şimdi tüm farkları görebiliyorum Build Settings, dağıtım özelliği Strip debug symbols during copyEVET olarak ayarlanmış.
Binarian

16
Alex1987 belirlediğim @ Strip debug symbols during copyetmek NOve Optimization Levelhiç None -O0projedeBuild Settings
Binarian

32
Ne yazık ki, bazı durumlarda lldb bunu hata ayıklama modundayken, optimizasyonlar kapalı ve hata ayıklama sembolleri mevcut olarak yapıyor. Bug report.apple.com'u ziyaret etme zamanı
ctpenrose

4
Aynı sorunu vardı - Optimizasyon düzeyi "Yok" idi. Sorun, bağlantı zamanı optimizasyonu (LTO) hata ayıklama modu için de "Evet" olarak ayarlanmış olmasıdır.
pi3

38

Hata ayıklama yapılandırması için "Optimizasyon Düzeyi" ayarladım "Hiçbiri" ve sorunu çözdü.


2
Komik, işe yaramadı. Tam tersini yaptım. Geçtim Fastest, Smallest[-Os]ve işe yaradı.
Nate Hat

Çok sayıda farklı öneri var, ancak bu (Hata ayıklama optimizasyonunu Yok olarak ayarlayarak) benim için düzeltti.
Dejal

29

Şema ayarlarınızda Adres Temizleyici'nin kapalı olduğundan emin olun. Adres Temizleyici hata ayıklayıcı ile iyi çalışmıyor.

  1. Düzeni Düzenle'ye (Ürün >> Düzeni >> Düzeni Düzenle) gidin, Çalıştır'ı seçin ve Tanı sekmesine gidin.
  2. "Adres Temizleyiciyi Etkinleştir" seçeneğinin kapalı olduğundan emin olun.

resim açıklamasını buraya girin


4
Benim için çözüm buydu. Görünüşe göre bunun olabileceği birçok neden var.
manroe

16

Görünüşe göre herkesin kendi çözümü var.

Benim için Objective-Cve Swiftaynı zamanda kullanıyorum.

Her şeyden önce, gidin TARGETS -> Build Settingsve aramacode generation

Bulacaksın Apple LLVM 6.0 ve Swift Compiler

Onların değiştirin Optimization Levelherkese None, daha sonra ayıklama, sen değerini değil bulabilirsiniznil

Şaşırtıcı bir şekilde değeri görebildiğinizde, bu sorunu kalıcı olarak çözersiniz, daha sonra olduğu gibi değiştirebilirsiniz Optimization Level.


11

Bunun başka yolları da olabilir. Benim için bunun nedeni, "Diğer C Bayrakları" değerinin "-O2" olarak ayarlanmış olmasıydı. Hata ayıklama derlemesi için bunu kapatmak sorunu çözdü.


9

Filtrelenmiş hata ayıklama çıktısı

Benim için Xcode hata ayıklayıcı çıktısını filtreliyordu. Çıktı ayarınızın Hata Ayıklayıcı Çıkışı veya Tüm Çıktı olduğundan emin olun


6

Bu sorunla yeni karşılaştım ve bunun Deployment Postprocessing = YES Yapı Ayarlarında .

NOAşağıdaki ekran görüntüsünde görüldüğü gibi bunu düzeltmek için değiştirmek :

resim açıklamasını buraya girin

Xcode sürümü: OSX 10.9.5'te 6.0.1 (6A317)


5

Ben sadece benzer bir sorunla karşılaşıyorum: Bir noktada Xcode hata ayıklayıcı, bir değer ile başlatılmış olmasına rağmen özellikle NSStrings (null) olarak bazı nesne türlerini yazdırdı. Üzerinden yazdırıldı

NSLog(@"String value: %@", myString);

nesne için doğru değer gösterildi.

Kafa karıştırıcı! Sorunu çözmek oldukça kolaydı: Xcode'u kapattım ve bilgisayarımı yeniden başlattım. Xcode'u yeniden başlattıktan sonra her şey tekrar iyi çalışıyor :).


5

Link-Time Optimization = NoDerleme Ayarları'nda hata ayıklama modu olduğundan emin olun .


Xcode 8'de bu sorunu sadece dinamik çerçeve oluşturma ayarlarımda karşılıyorum! Thx
Vmeyer

3
  1. Türetilmiş Verileri Sil
  2. Oldukça Xcode / Yeniden Başlat
  3. Temiz Proje

Benim için gereken bu.


2

Buradaki çözümler error: <EXPR>:1:1: error: use of unresolved identifier, pobir değişkeni her denediğinizde gördüğünüz hatayı düzeltir .

Benim için çözüm, her ayarın ayarlandığından emin olmak Build Settingsve arama Optimization Levelyapmaktı .DebugNone


Bu aslında benim için düzeltti. Ayarı devre dışı bırakmak için dezavantajı nedir?
Jasper

1

Derleme ayarında "Diğer C Bayrakları" na gidin ve hata ayıklama değerini -o2'den -O0'a ayarlayın


0

Ben de bu koştum ve ben serbest bırakma modunda bulduğumda hata ayıklama geçmek ... hiçbir düzeltme. Temiz bir ilk (cmd + shift + k) yapmak zorunda olduğum ortaya çıkıyor.

Bu yüzden ne olduğunu düşünüyorum, serbest bırakma modunda yerleşik sonra her şey geliştirmek içinde yeniden derlenmiş değildir ve bu yüzden lldb sembolleri düzgün okuyamaz. Temizlik ve derleme sonra geliştirmek benim için çalıştı.


-3

Gerçek şu ki, sistem kutunun dışında çalışmalı ve çok sayıda farklı ayarın, işlerin sizin için çalışabileceği veya çalışamayacağı bir noktaya bağlantılardan kaynaklanmamalıdır.

Sistem neden hata ayıklama modundayken her zaman hata ayıklamaya izin vermez, sadece Apple'ın cevaplayabileceği bir gizemdir (eğer ilgilenirlerse, hangi latelly yaptıklarından şüpheliyim).

Sonuçta, hata ayıklama / hata ayıklama arasındaki fark metadata sahip ve sadece bellek / disk alanını dolduran ekstra tablolar olacaktır.

Doğrudan simülatöre veya bir cihaza karşı derliyorsanız, bu ekstra megabaytlarla ilgilenmezsiniz.

Bu yüzden, geçen yüzyıldan beri bildiğim tüm idellerin gayet iyi yaptığı çok temel ve sade bir şey yapmak için ekstra döngüler çalıştırmamız gerekiyor.

Ve benim için işe yarayan şey, Bağlantı Zamanı Optimizasyonunda "Hata Ayıkla" da "Monolitik" ten "Hayır" (xcode 8) olarak değişiyordu.


Xcode = Kutudan çıkan paket yöneticisi yok, otomatik tamamlama ve diğer özellikler üzerinde çalışıyor irade, derleme süreleri çok büyük, vb.
zirinisp
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.